web-dev-qa-db-ja.com

特定のカテゴリに属する​​カスタム投稿タイプの投稿を取得するためのWP_Query引数

私は何時間もプレイしてきましたが、クエリされたカテゴリに含まれるmy_custom_post_typeのすべての投稿を取得するセカンダリWP_Queryの正しい引数に頭を包むことはできません。

シナリオは、カスタム投稿タイプの投稿用のカテゴリアーカイブをレンダリングするためのカスタムcategory.phpテンプレートファイル(カスタムテーマの作成)です。したがって、主なクエリは、URLから検索されたカテゴリ名/スラッグによるものである(例えば、/カテゴリ/猫名)。ただし、デフォルトでは、メインクエリはカスタムの投稿タイプの投稿を取得しません。注意してください、私は私のカスタム投稿タイプでデフォルトのカテゴリー分類法を使います。

だから、私はのようなものを探しています

$args = array(
  'post_type' => 'my_custom_post_type',
  'category_id'  => $current_category_id
);

しかし、メインクエリから$ current_category_idを取得する方法は?それとも、正しい方法は?

1
Bunjip

メインのクエリでカスタム投稿タイプを考慮に入れたい場合は、次のようにします。

function add_custom_post_type_to_query( $query ) {
    if ( $query->is_archive() && $query->is_main_query() ) {
        $query->set( 'post_type', array('post', 'my_custom_post_type') );
    }
}
add_action( 'pre_get_posts', 'add_custom_post_type_to_query' );

上記のコードをあなたのテーマのfunctions.phpまたはプラグインに入れることができます。

現在の分類法の用語ID(ここでは分類法がデフォルトの「カテゴリ」分類法です)を取得するには、次のコード行を使用します。

get_queried_object()->term_id;

から取られたここ

カスタム投稿の種類について説明しているので、おそらくいつかカスタム分類を使用します。 WP_Queryに分類フィルタリングを正しく含めるには、このリンクを参照してください

これは、分類法が分類されたサンプルWP_Queryです。

$args = array(
    'post_type' => 'my_custom_post_type', // or multiples : array('my_custom_post_type','post')
    'tax_query' = array(
        array(
            'taxonomy' => 'category',
            'field'    => 'term_id',
            'terms'    => get_queried_object()->term_id,
        )
    )
);

ただし、自動的に実行されるため、現在の分類法用語に対してtax_queryを指定してWP_Queryを実行したくはないでしょう(メインクエリの投稿タイプにカスタム投稿タイプを追加した後)。

3
Sladix