カスタムフィールド使って記事の絞り込みについて
【やりたいこと】
・カスタムフィールドでカテゴリーページに任意のタグを設定
・カテゴリーページの記事一覧でタグ(チェックボックス形式)による絞り込み機能の実装(非同期)
【やったこと】
以下のサイトを参考に、Ajaxでの記事の絞り込みを行いました。
上記記事と違うのは、タグすべてを表示させるのではなく、
管理画面でカスタムフィールドによって設定したタグのみ出したいというところです。
【発生している問題】
カスタムフィールドで設定した絞り込み用のタグ(チェックボックス形式)が正しく表示されません。
正確に言うと、最初は正しく表示されているのですが、
絞り込みのチェックボックスをクリックしてAjax走ると、なぜかカスタムフィールドで設定していないすべてのタグがチェックボックスとして表示されてしまいます。
【問題部分のコード】
参考サイト見て見様見真似です。
PHP
1<?php 2 $paged = get_query_var('paged') ? get_query_var('paged') : 1; 3 $args = array( 4 'paged' => $paged, 5 'post_type' => 'post', 6 'post_status' => 'publish', 7 'posts_per_page' => 4, 8 'orderby' => 'date', 9 'order' => 'DESC' 10 ); 11 12 if(!empty($_POST['search_tag'])) { 13 foreach($_POST['search_tag'] as $value) { 14 $search_tag[] = htmlspecialchars($value, ENT_QUOTES); 15 } 16 $args += array('tag__in' => $search_tag); 17 } 18 19?> 20<div id="search-result"> 21<form id="category-tags-form" method="get" action="<?php echo esc_url(get_the_permalink()); ?>"> 22 23<?php 24 25 $category_id = get_queried_object_id(); 26 $post_id = 'category_'.$category_id; 27 $category_tags = get_field('category_popular_tags', $post_id ); 28 29 $terms = get_terms( array( 30 'taxonomy' => 'post_tag', 31 'orderby' => 'post__in', 32 'include' => $category_tags, 33 'order' => 'DESC', 34 )); 35 36 37?> 38 39<?php if($terms): ?> 40 <?php foreach((array)$terms as $value): 41 $checked = ""; 42 if(in_array($value->term_id, $search_tag)) $checked = " checked"; 43 ?> 44 <label><input type="checkbox" name="search_tag[]" value="<?php echo esc_attr($value->term_id); ?>"<?php echo $checked; ?>><?php echo $value->name; ?></label> 45 <?php endforeach; ?> 46<?php endif; ?> 47 48<?php wp_nonce_field('my-ajax-nonce', 'nonce'); ?> 49 50</form> 51<?php 52 $the_query = new WP_Query($args); 53 if($the_query->have_posts()) : 54?> 55<div class="result archive-list"> 56<?php 57 while($the_query->have_posts()) : 58 $the_query->the_post(); 59?> 60<?php get_template_part('template-parts/archive-article'); ?> 61<?php endwhile; wp_reset_postdata(); ?> 62</div> 63<?php else : ?> 64 <p>該当する記事がまだ存在していません。</p> 65<?php endif; ?> 66 67</div>
JavaScript
1 function customSearch(){ 2 // 1. フォームのデータを生成 3 var form = $('#category-tags-form').get()[0]; 4 var formData = new FormData(form); 5 formData.append('action', 'custom_search'); 6 7 // 2. Ajaxを行う 8 $.ajax({ 9 type: 'POST', 10 url: ajaxurl, 11 data: formData, 12 processData: false, 13 contentType: false, 14 success: function(data){ 15 $('#search-result').prop('outerHTML', data); 16 } 17 }); 18 return false; 19 }; 20 21 $(document).on('click', 'input[name="search_tag[]"]', function(){ 22 customSearch(); 23});
何かおかしなところあれば教えていただきたいです。。
よろしくお願いいたします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/28 01:36
2020/07/28 02:55