如果你想做的只是display all post types on the taxonomy archive, 然后,您可以通过在pre_get_posts
. 假设分类法foobar
:
function wpse111033_filter_pre_get_posts( $query ) {
if ( $query->is_main_query() && $query->is_tax( \'foobar\' ) ) {
$query->set( \'post_type\', \'any\' );
}
}
add_action( \'pre_get_posts\', \'wpse111033_filter_pre_get_posts\' );
电话里说“如果我在
foobar
分类法存档,我是主要查询对象,然后查询所有帖子类型,而不仅仅是
post
岗位类型。“”
根据此注释编辑:
假设有Post Type X和Post Type Y/taxonomy\\u name/term1会列出术语1的帖子,以及包含该术语的Post Type X和Post Type Y中的帖子(在帖子下的主要内容区域)。
为此,您需要创建一个自定义taxonomy.php
, 这就完成了您要完成的任务,或者创建一个自定义页面模板。
现在假设您在/taxonomy\\u name/term1/page/2上,我不希望运行2个post-type循环,我希望taxonomy页面正常工作。
这将很棘手,但完全有可能。该过程如下所示:
创建自定义taxonomy.php
使用pre_get_posts
回调以包括所有帖子类型$paged
或is_paged()
有条件确定您是在第一页上还是在“分页”页上,如果! is_paged()
, 那么你就在第一页了,所以如果is_paged()
, 然后,您位于第一页以外的另一页,因此请偏移帖子,并显示一个正常循环taxonomy.php
/**
* Simplified markup for taxonomy archive index
*/
get_header();
// First page
if ( ! is_paged() ) {
?>
<ul>
<?php
if ( have_posts() ) : while ( have_posts() ) : the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile; endif;
?>
</ul>
<?php
}
// Subsequent pages
else {
if ( have_posts() ) : while ( have_posts() ) : the_post();
// Normal loop output here
endwhile; endif;
}
get_footer();
pre_get_posts
function wpse111033_filter_pre_get_posts( $query ) {
if ( $query->is_main_query() && $query->is_tax( \'foobar\' ) ) {
// Include all post types
$query->set( \'post_type\', \'any\' );
// On the first page,
// display all posts
if ( ! $query-is_paged() ) {
$query->set( \'posts_per_page\', \'-1\' );
}
// On subsequent pages,
// offset posts
else {
// You could do: $query->set( \'offset\', \'-10\' );
// But this will break pagination,
// so we need to fix it again
$query->set( \'posts_per_page\', \'10\' );
$page_offset = ( ( $query->query_vars[\'paged\']-1 ) * 10 ) - 10;
$query->set( \'offset\', $page_offset );
}
}
}
add_action( \'pre_get_posts\', \'wpse111033_filter_pre_get_posts\' );
found_posts
但是弄乱页面偏移量会破坏查询分页(因为WordPress不会考虑它),因此我们需要另一个修复:
function wpse111033_filter_found_posts( $found_posts, $query ) {
if ( $query->is_main_query() && $query->is_tax( \'foobar\' ) ) {
if ( $query->is_paged() ) {
// Get the right posts
return $found_posts + 10;
}
}
}
add_filter( \'found_posts\', \'wpse111033_filter_found_posts\', 10, 2 );