contact form 7 でクッキー情報を送信する

contact form 7 でクッキー情報を送信する方法を試行錯誤しながら書いたので備忘録的な感じで書いていきます。

#なぜやろうと思ったか
元々の機能としては投稿をブックマークしてそのブックマークをしたものをformで送信するというものを作成するつもりでした。

しかし、ブックマークするプラグインは溢れているのにも関わらず、それをformで送信する機能のついたプラグインは確認できませんでした。

それならいっそ作ってしまおうと、そういうことです。

```functions.php
<?php 
add_action( 'get_header', 'fovorites_form');

function fovorites_form() {
if(!is_NULL($_COOKIE["simplefavorites"])){
  preg_match('/(?<=^.{27}).+/', $_COOKIE["simplefavorites"], $aaa);
  $i = 0;
  $j = 0;
  $splited = str_split($aaa[0]);
  $str[0] = '';
  while($splited[$j] != ']'){
    if($splited[$j] == ','){
      $i++;
      $str[$i] = '';
    }
    else{
      $str[$i] .= $splited[$j];
    }
    $j++;
  }
  global $wpdb;
  // $length = strlen($str);
  $sql = '';
  foreach ($str as $value) {
      $sql .= $value;
      $sql .= ',';
  }
  $sql = substr($sql, 0, -1);
  $result = $wpdb->get_results("SELECT post_title, guid FROM wp_posts WHERE ID IN ($sql)", ARRAY_A );
  $i = 0;
  foreach ($result as $value) {
    $json[$i]['post_title'] = $value['post_title'];
    $json[$i]['post_guid'] = $value['guid'];
    $i++;
  }
  wp_enqueue_script('some_handle', '../js/main.js', array( 'jquery' ), false, true);
  wp_localize_script('some_handle', 'object_name', $json);
}
}

function getCatItems($atts, $content = null) {
          extract(shortcode_atts(array(
            "num" => '6'
          ), $atts));
         
          // 処理中のpost変数をoldpost変数に退避
          global $post;
          $oldpost = $post;
         
          // カテゴリーの記事データ取得
          $myposts = get_posts('numberposts='.$num.'&order=DESC&orderby=post_date&category='.$cat);
         
          if($myposts) {
                        // 記事がある場合↓
                        $retHtml = '<div class="blog-section" id="posts_show"><div class="grid wow fadeInUp" data-wow-duration="1s" data-wow-delay="0.1s" style="visibility: visible; animation-duration: 1s; animation-delay: 0.1s; animation-name: fadeInUp;">';
                        // 取得した記事の個数分繰り返す
                        foreach($myposts as $post) :
                                      // 投稿ごとの区切りのdiv
                                      $retHtml .= '<div class="post"><div class="holder">';
                                      // 記事オブジェクトの整形
                                      setup_postdata($post);
                                      // サムネイルの有無チェック
                                      if ( has_post_thumbnail() ) {
                                                    // サムネイルがある場合↓
                                                    $retHtml .= '<div class="img-holder">' . get_the_post_thumbnail($page->ID, 'thumbnail') . '</div>';
                                      } else {
                                                    // サムネイルがない場合↓※何も表示しない
                                                    $retHtml .= '<div class="img-holder"></div>';
                                      }
                                     
                                      // 文章のみのエリアをdivで囲う
                                      $retHtml .= '<div class="text-holder">';
                                     
                                      // 投稿年月日を取得
                                      $year = get_the_time('Y'); // 年
                                      $month = get_the_time('n');           // 月
                                      $day = get_the_time('j');   // 日
                                     
                                      $retHtml .= '<header class="entry-header"><span class="posted-on"><time>' . $year . '年' . $month . '月' . $day . '</time></span></header>';
                                     
                                      // タイトル設定(リンクも設定する)
                                      $retHtml.= '<h3 class="entry-title">';
                                      $retHtml.= '<a href="' . get_permalink() . '">' . the_title("","",false) . '</a>';
                                      $retHtml.= '</h3>';
                                     
                                      // 本文を抜粋して取得
                                      $getString = get_the_excerpt();
                                      $retHtml.= '<div class="entry-content">' . $getString . '</div>';
                                     
                                      $retHtml.= '</div></div></div>';
                                     
                        endforeach;
                       
                        $retHtml.= '</div></div></div>';
          } else {
                        // 記事がない場合↓
                        $retHtml='<p>記事がありません。</p>';
          }
         
          // oldpost変数をpost変数に戻す
          $post = $oldpost;
         
          return $retHtml;
}
// 呼び出しの指定
add_shortcode("getCategoryArticle", "getCatItems");

function wcs_search_form_shortcode() {
echo "<span class='fixpage'>";
get_search_form();
echo "</span>";
}
add_shortcode( 'search', 'wcs_search_form_shortcode' );
 ?>
```

全体像はこんな感じです。
jsファイルは

```main.js
jQuery(function(){
  if(jQuery('#documents').length != 0){
    if(object_name != NULL){
      var checkbox = jQuery('#documents input').html();
      var input;
    for (var i = 0; i < object_name.length; i++) {
        input = '<input type="checkbox" name="' + 'checkbox-455[]' + '" value="' + object_name[i]['post_title'] + '" checked="checked"><a href="' + object_name[i]['post_guid'] + '">' + object_name[i]['post_title'] + '</a><br>';
        jQuery('#documents').append(input);
       }
    }
    else
    {
        jQuery('#documents').append('<p>請求する資料がありません</p><p><a href="...">習い事を探す</a></p>');
    }
  }
});

  jQuery(function(){
    if(jQuery('.for-document-form').length != 0){
      if(object_name == NULL){
            jQuery('.for-document-form a').text('資料をさがす');
            jQuery('.for-document-form a').attr('href', '...');
      }
    }
  });
```