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

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

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

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

Q&A

解決済

1回答

3078閲覧

カスタムタクソノミーによるカスタム投稿の抽出を、フィルターフックに書き換えたい

maifukuhara

総合スコア83

WordPress

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

0グッド

0クリップ

投稿2017/12/31 02:45

編集2017/12/31 03:16

現在、特定のカスタムタクソノミー「'exclude-01'と'exclude-02」を除外して
カスタム投稿「my-custom-post」の絞込み表示を行っています。

php

1//テンプレート内に直接記述 2 3//カスタムタクソノミー'exclude-01'と'exclude-02以外の記事を抽出 4$my_tax_query = array( 5 array( 6 'taxonomy' => 'my-custmon-category', 7 'field' => 'slug', 8 'terms' => array('exclude-01','exclude-02'), 9 'include_children' => false, 10 'operator' => 'NOT IN' 11 ), 12 'relation' => 'AND', 13 ); 14 15//カスタムクエリ用の配列を作成 16 $query_args = array( 17 'post_type' => 'my-custmon-post', 18 'tax_query' => $my_tax_query, 19 'post_status' => 'publish', 20 ); 21 22//記事取得 23 $custom_query = new WP_Query($query_args) ;

上記の抽出を、
プラグインAPIのフィルターフックを用いて、
functions.phpに記述したいと思っています。

WPDocsを参考に下記を書いてみたのですが、
うまく抽出されないようです。

php

1//functions.php 2//参考 http://wpdocs.osdn.jp/カスタムクエリ 3add_action('pre_get_posts', 'my_remove_cat' ); 4function my_remove_cat() 5{ 6 global $wp_query; 7 $wp_query->query_vars['tax_query'] = array( 8 'relation' => 'AND', 9 array( 10 'taxonomy' => 'my-custmon-category', 11 'field' => 'slug', 12 'terms' => array('exclude-01','exclude-02'), 13 'include_children' => false, 14 'operator' => 'NOT IN' 15 ) 16 ); 17}

アドバイスをいただけないでしょうか。
よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

WordPress は WP_Query で出来ているといっても過言ではありません。そう書くと、全ての WP_Query に影響があるので、必要な部分に限定したほうが良いです。

PHP

1add_action( 'pre_get_posts', 'my_remove_cat' ); 2function my_remove_cat( $query ) { 3 // 管理画面およびメインクエリ以外に干渉しないために必須 4 if( is_admin() || !$query->is_main_query() ) { 5 return; 6 } 7 8 if ( $query->is_category() ) { // 例:カテゴリーページ 9 $my_tax_query = array( 10 array( 11 'taxonomy' => 'my-custmon-category' 12 , 'field' => 'slug' 13 , 'terms' => array( 'exclude-01', 'exclude-02' ) 14 , 'include_children' => false 15 , 'operator' => 'NOT IN' 16 ) 17 , 'relation' => 'AND' 18 ); 19 $query->set( 'tax_query', $my_tax_query ); 20 return; 21 } 22}

日本語版のWPDocsは更新が遅い箇所もあるので、Reference(英語版)から探すか、丁寧な日本語記事を探すほうが解決しやすいと思います。(例えば pre_get_posts tax_query で検索 するとか)

【pre_get_postsでメインクエリを制御する | Tips Note by TAM】
https://www.tam-tam.co.jp/tipsnote/cms/post9420.html

【pre_get_posts | Hook | WordPress Developer Resources】
https://developer.wordpress.org/reference/hooks/pre_get_posts/

投稿2017/12/31 05:11

kei344

総合スコア69366

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

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

maifukuhara

2018/01/05 02:41

結果報告が遅れてすみません。 今ほど、開発環境でテストして、無事OKでした。 大変助かりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問