我为特定标记的条目列表创建了自己的模板(tag.php
),它将显示10个条目,并带有上一个(&;下一个链接。
<?php
$paged = get_query_var(\'paged\') ? get_query_var(\'paged\') : 1;
$args = array(
\'post_type\' => \'custom_post\',
\'posts_per_page\' => \'10\',
\'tag\' => "$some_tag",
\'paged\' => "$paged",
\'post_status\' => \'publish\',
\'orderby\' => \'date\',
\'order\' => \'ASC\'
);
$loop = new WP_Query($args);
while($loop->have_posts()): $loop->the_post();
// displaying items here
endwhile;
<nav id="page-nav">
<?php previous_posts_link(\'≪ Previous\', $loop->max_num_pages); ?>
<?php next_posts_link(\'More ≫\', $loop->max_num_pages); ?>
</nav>
<?php endif; ?>
?>
它创建了一个
More
链接到
/tag/ta_name/page/2
但当我点击它时,它显示404。
我查看了其他博客,标签档案分页确实以/page/N
所以我想我的url没有问题。
我是在哪里出错的,或者我的任何设置都是错误的?
SO网友:fuxia
当前页码由主查询设置,而不是由嵌入的子查询设置。此外,您确实不应该创建第二个查询,而是应该在打开筛选器的情况下更改主查询pre_get_posts
.
add_filter( \'pre_get_posts\', \'add_custom_type_to_tag_archive\' );
function add_custom_type_to_tag_archive( $query )
{
if ( ! is_main_query() or ! is_tag() )
return $query;
$query->set( \'post_type\', array ( \'custom_type\', \'post\' ) );
$query->set( \'posts_per_page\', 10 );
return $query;
}
说明:
当WordPress加载tag.php
它已经查询了数据库中的标记。它已经知道它是什么标签,什么帖子类型,总共有多少个结果,以及当前页面的结果
现在更改分页为时已晚。您不应该浪费这个查询,因为它需要时间。
因此,以后不要试图覆盖主查询,而是更改主查询以获得更快、更可靠的结果。