0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-10-21

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', '...');
      }
    }
  });
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?