以下の方法で、すべてのアーカイブページのメインループを調整する必要があります。カスタム分類法 "myposttypes"を登録しました。すべての投稿は、厳密に1つの "myposttype"という用語に割り当てられています。
カテゴリまたはタグのアーカイブページの場合は、 "myposttypes-> term1"の投稿のみをクエリ結果に含める必要があります。
カスタム分類アーカイブページの場合は、 "myposttypes-> term2"の投稿のみをクエリ結果に含める必要があります。
対応するpre_get_posts
フックを既に実装していますが、 アーカイブページすべてに対して結果がまったく得られません。 私は自分のブログインスタンスに対応する分類法を含む投稿をたくさん持っているので結果があるはずです。
これが私のアプローチです:
function wpmw_adjust_archive_queries( $query ) {
if ( ! is_admin() && is_archive() && $query->is_main_query() ) {
if ( is_category() || is_tag() ) $term_slug = 'term1';
if ( is_tax( 'beitragsarten', 'news' ) ) $term_slug = 'term2';
$taxquery = array(
'tax_query' => array(
array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
),
),
);
$query->set( 'tax_query', $taxquery );
}
}
add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );
更新: これは私の調整された単純化されたアプローチですが、残念ながらまだうまくいきません。空の結果が出ます。 $ queryをvar_dumpし、tax_queryがquery_varsに正しく追加されたようです。
function wpmw_adjust_archive_queries( $query ) {
if ( ! is_admin() && $query->is_archive() && $query->is_main_query() ) {
$tax_query = $query->get( 'tax_query' ) ? : array();
$tax_query[] = array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => array( 'term1' ),
'operator' => 'IN'
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'wpmw_adjust_archive_queries' );
これは$ queryの対応する部分です
[tax_query] => Array
(
[0] => Array
(
[taxonomy] => myposttypes
[field] => slug
[terms] => Array
(
[0] => term1
)
[operator] => IN
)
)
tax_query
を間違って使用しています。 Codex Page /をご覧ください。
tax_query
は、次のものを含むことができる配列です。
relation
- 文字列であるべきです(AND/OR)あなたのコードであなたの設定tax_query
を:
$taxquery = array(
'post_type' => 'post',
'tax_query' => array(
array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
),
),
);
そしてそれはなるはずです:
$taxquery = array(
array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
),
);
post_type
は別のパラメータなので、tax_query
内に設定することはできません。
tax_query
を変更した場合でも、注意が必要です。すでに値が設定されている可能性があります。あなたがそれを尊重したいのであれば、あなたはこのようなものを使うべきです:
$tax_query = $query->get( 'tax_query' );
if ( ! is_array( $tax_query ) ) {
$tax_query = array();
}
$taxquery[] = array(
'taxonomy' => 'myposttypes',
'field' => 'slug',
'terms' => $term_slug
);
$query->set( 'tax_query', $taxquery );
このようにして、既存のクエリに税クエリを追加し、それらを上書きしません。