WordPress内にカスタム投稿を設置し、記事一覧ページでもお気に入りボタンが動くようにしたいと思っています。
実現したいこと
このページを参考にお気に入りボタンを設置し、記事の詳細ページではお気に入りに登録させる事はできました。
只、記事一覧ページや検索結果ページではお気に入り登録ボタンを押しても登録がされない状態であり、詳細ページだけではなく、一覧ページなどでも任意の記事をお気に入り登録できるようにしたいです。
該当のソースコード
【header.phpのbody直後】 <script> $(function(){ var fav = []; var current_page_id = $(".favorite_button").data("pageid"); checked_inspect(); $(document).on('click','.favorite_button_in',function(){ var index = fav.indexOf(current_page_id); if(index > -1){ fav.splice(index, 1); } else { fav.push(current_page_id); } var serializedArr = JSON.stringify( fav ); $.cookie("fav_item",serializedArr, { expires: 7, path: '/' }); checked_inspect(); }); function checked_inspect(){ fav = $.cookie("fav_item") ? JSON.parse( $.cookie("fav_item") ) : []; console.log(fav); if(fav.indexOf(current_page_id) > -1){ $("body").addClass("is-choosen"); } else { $("body").removeClass("is-choosen"); } } }); </script>
【お気に入り一覧】 <?php /*cookieを取得*/ if(array_key_exists('fav_item', $_COOKIE)){ $checked_items = $_COOKIE['fav_item']; $checked_items = json_decode($checked_items); } ?> <?php if($checked_items):?> <?php foreach ($checked_items as $checked_item) : ?> <a href="<?php echo $permalink = get_permalink( $checked_item ); ?>"> <p><?php echo $title = get_the_title($checked_item); ?></p> </a> <?php endforeach;?> <?php else :?> <p>お気に入りはありません。</p> <?php endif;?>
【お気に入り登録ボタン】 <div class="favorite_button" data-pageid="<?php the_ID(); ?>"> <button class="favorite_button_in" onclick="window.location.reload();"><i class="fas fa-star"></i><p>お気に入り登録</p></button> </div> ※サイドバーにお気に入り一覧を設置しているので、ボタンにリロードを取り入れています。
考えられる原因
【header.phpのbody直後】に記載されている記述で、あくまで現在のページのCookie保存をしているので、これを現在のページだけではなく、【お気に入り登録ボタン】に記述している「data-pageid="<?php the_ID(); ?>」で出来ればいけるような気もしておりますが、調べても肝心の思うような参考記事も見つからない状況で難儀してます。
お手数ですが、お知恵をお借りできれば幸いです。
よろしくお願いいたします。
【ご回答用の追記※トップページも同一記述】
【一覧】 <ul class="food_list"> <?php $paged = (int) get_query_var('paged'); $args = array( 'posts_per_page' => 5, 'paged' => $paged, 'orderby' => 'post_date', 'order' => 'DESC', 'post_type' => 'post', 'post_status' => 'publish' ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) : while ( $the_query->have_posts() ) : $the_query->the_post(); get_template_part( 'foodlist', get_post_format() ); endwhile; endif; wp_reset_postdata(); ?> </ul> 【foodlistの中身】 <li class="foodbox"> <div class="food_table"> <div class="food_th"> <h3><?php the_title(); ?></h3> </div> <div class="food_td"> <div class="favorite_button" data-pageid="<?php the_ID(); ?>"> <button class="favorite_button_in" onclick="window.location.reload();"><p>お気に入り登録</p></button> </div> </div> </div> </li>
回答2件
あなたの回答
tips
プレビュー