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

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

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

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

PHP

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

Q&A

解決済

2回答

2790閲覧

WP カスタム投稿タイプでの管理画面で複数ターム絞り込み検索 選択状態保存できない。

asti

総合スコア6

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/01/11 01:04

編集2020/01/11 01:24

PHP

1function.php 2 3add_action( 'restrict_manage_posts', 'add_term_dropdown', 10, 2 ); 4function add_term_dropdown( $post_type ) { 5 if ( 'products' == $post_type ) { 6 7 $term_slug = get_query_var('products_cat'); 8 $taxonomy_var = get_taxonomy('products_cat'); 9 10 wp_dropdown_categories( array( 11 'show_option_all' => $taxonomy_var->label, 12 'selected' => $term_slug, 13 'name' => 'products_cat', 14 'taxonomy' => 'products_cat', 15 'value_field' => 'slug', 16 )); 17 } 18} 19

こちらのコードの場合だと、選択状態がキッチリ保存されるのですが、
この場合、複数タームでの絞り込みが出来ません。

下記がforeachで、セレクトボックスを複数表示してみたコードです。

PHP

1add_action( 'restrict_manage_posts', 'add_term_dropdown', 10, 2 ); 2function add_term_dropdown( $post_type ) { 3 4 $products_cats = ['products_cat_1', 'products_cat_2', 'products_cat_3']; 5 6 if ('products' == $post_type) { 7 foreach ($products_cats as $products_cat) { 8 9 $term_slug = get_query_var($products_cat); 10 $taxonomy_var = get_taxonomy($products_cat); 11 12 wp_dropdown_categories(array( 13 'show_option_all' => $taxonomy_var->label, 14 'selected' => $term_slug, 15 'name' => $products_cat, 16 'taxonomy' => $products_cat, 17 'value_field' => 'slug', 18 )); 19 } 20 } 21} 22

このコードで複数セレクトボックスは表示されるのですが、
絞り込み検索をしてみると、**「無効な投稿形式」**と表示されてしまい
絞り込み検索ができません。

関数定義の部分のfunction add_term_dropdown( $post_type ) { ()内の$post_typeを消して
関数内にglobal $post_type;を追記すると問題なく検索できますが、今度は選択状態が保存されません。

この場合どのように記載するのが正しいのでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

あまり関係無いと思いますが
add_action( 'restrict_manage_posts', 'add_term_dropdown', 10, 2 );

add_action( 'restrict_manage_posts', 'add_term_dropdown', 10, 1 );
または
add_action( 'restrict_manage_posts', 'add_term_dropdown', 10 );
でしょう。

コードに関しては特に問題は無いように思いますので、他の部分が影響してるのではないでしょうか。
プラグインの停止とfunctions.phpを必要最低限のコードにして試してみてはいかがでしょうか。

投稿2020/01/11 03:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

asti

2020/01/11 11:05

Space-Monkeyさん。ありがとうございます。 [こちらの記事を参考に](https://gist.github.com/gatespace/74ec5299cf9b31e4090e1c520ab4655e)作成したのですが、 こちらでは `add_action( 'restrict_manage_posts', 'add_term_dropdown', 10, 2 );` となっておりますが、 `add_action( 'restrict_manage_posts', 'add_term_dropdown', 10, 1 );` もしくは `add_action( 'restrict_manage_posts', 'add_term_dropdown', 10 );` のほうが良いということでしょうか。理由を教えていただけましたら、幸いです。
退会済みユーザー

退会済みユーザー

2020/01/11 23:30

10,2等の値の2は引数の数です。 もし、function add_term_dropdown( $post_type, $a ) {なら 10,2 もし、function add_term_dropdown( $post_type, $a, $b ) {なら 10,3 となります。 参考にされたサイトの記述が正しくないです。 もし、function add_term_dropdown( $post_type, $a, $b ) {なのに 10,2とするとエラーになりますが、10,4としてもエラーになりません。 少ない場合のみ問題となるので引数が1でも10,2で動くわけですが、正しくは10,1です。 10の値は優先順序ですが、デフォルトで10なので10ならば省略しても構いません。 引数が1なら,1としなくて省略しても構いません。 よって add_action( 'restrict_manage_posts', 'add_term_dropdown' );でも構いません。
asti

2020/01/14 09:41

なるほど、大変詳しいご説明ありがとうございます。 ご参考にさせていただきます。 ありがとうございました!
guest

0

自己解決いたしました。

PHP

1function SearchFilter($query) { 2 if ($query->is_search) { 3 $query->set('post_type', array('products1', 'products2', 'products3')); 4 } 5 return $query; 6} 7add_filter('pre_get_posts', 'SearchFilter');

コチラのコードが悪さしていたようです。

if (!is_admin()) {}で囲うことで問題解決いたしました。

投稿2020/01/11 07:25

asti

総合スコア6

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問