我需要按以下方式调整所有归档页面的主循环。我已经注册了自定义分类法“myposttypes”。每一篇文章都被分配给一个术语“myposttypes”。
如果是类别或标记存档页面,则查询结果中只应包含带有“myposttypes->term1”的帖子。
如果是自定义分类法归档页面,则查询结果中只应包含带有“myposttypes->term2”的帖子。
我已经执行了相应的pre_get_posts
钩住但I\'m not getting any results at all for all my archive pages. 在我的博客实例中,我有很多带有相应分类法的帖子,所以应该会有结果。
以下是我的方法:
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\' );
UPDATE:这是我经过调整和简化的方法,不幸的是,这仍然不起作用。我得到一个空结果。I var\\u dump\'ed$query和tax\\u query似乎正确添加到query\\u 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\' );
下面是$查询的对应部分
[tax_query] => Array
(
[0] => Array
(
[taxonomy] => myposttypes
[field] => slug
[terms] => Array
(
[0] => term1
)
[operator] => IN
)
)
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成
您使用tax_query
不正确。看看Codex Page
tax_query
应该是一个数组,可以包含:
relation
- 它应该是字符串(和/或)分类术语-定义了分类、字段、术语等的数组
在您的代码中输入您的设置
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 );
这样,您就可以将税务查询添加到现有查询中,而不是覆盖它们。