Help us understand the problem. What is going on with this article?

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', '...');
      }
    }
  });
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした