質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

2回答

657閲覧

カスタムフィールド使って記事の絞り込みについて

IGE

総合スコア46

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

非同期処理

非同期処理とは一部のコードを別々のスレッドで実行させる手法です。アプリケーションのパフォーマンスを向上させる目的でこの手法を用います。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/07/28 00:30

カスタムフィールド使って記事の絞り込みについて

【やりたいこと】
・カスタムフィールドでカテゴリーページに任意のタグを設定
・カテゴリーページの記事一覧でタグ(チェックボックス形式)による絞り込み機能の実装(非同期)

【やったこと】
以下のサイトを参考に、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});

何かおかしなところあれば教えていただきたいです。。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

'include' => array(1,2,3),で動くというのなら$category_tags の形式がおかしい可能性があります。

php

1$category_tags = get_field('category_popular_tags', $post_id );

のすぐ下に
var_dump($category_tags );を追加してみてください。
想定通りの配列になっていますか?
(ACFから取得しているっぽいのでフィールドの中身は単純配列ではなくlabelやvalueが含まれた連想配列になって要るっぽい気がするのですが)

投稿2020/07/28 01:27

gogoweb_ikeda

総合スコア1426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IGE

2020/07/28 01:36

ご回答いただけて嬉しいです。。ありがとうございます! はい。ACFから取得しています。 var_dump($category_tags );を入れましたら、 以下のような感じに出ました。 array(5) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) } ただ、問題の一回でもチェックボックスをクリックすればNULLになります。。
gogoweb_ikeda

2020/07/28 02:55

参考サイトも確認してざっと見た感じではsearch-resultの部分をAJAXで別のテンプレートを使って上書きしているのですよね?そのテンプレート部分は提示できますか? そのテンプレートでは $category_id $post_id $category_tags は正常な値が入っているのでしょうか? AJAX先で読み込まれるテンプレートはカテゴリーページではないのでget_queried_object_idでカテゴリーIDが取得できない気がします。 そのあたりは現在のカテゴリーIDを引き渡す形になっていますか?
guest

0

phpとjsがごっちゃになって問題の切り分けがしづらいですね
phpがhtmlを返すならとりあえずスタティックなhtmlを呼ぶようにして
js+外部htmlで挙動を確認するところからです

投稿2020/07/28 00:52

yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

IGE

2020/07/28 01:03

ご回答ありがとうございます! そうなのですね。。どのように挙動を確認していけば良いのかあまりわかっておらず、、 ちなみにですが、 'include' => $category_tags, の部分を以下のように 'include' => array(1,2,3), 直接書くとちゃんと動きます。。 ちゃんと理解して書いていけというのは分かるのですが、、まずは実装したいと言う事情があり、、お力・ご助言いただけると嬉しいです。。 よろしくお願いいたします。
yambejp

2020/07/28 01:05

たんにphpが正しいhtmlを吐いていないならそれを修正することです DBの部分は書かれていないのでちょっと判断できません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問