/tag/tag_name/page/2出现404错误

时间:2013-05-24 作者:rei

我为特定标记的条目列表创建了自己的模板(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没有问题。

我是在哪里出错的,或者我的任何设置都是错误的?

1 个回复
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 它已经查询了数据库中的标记。它已经知道它是什么标签,什么帖子类型,总共有多少个结果,以及当前页面的结果
现在更改分页为时已晚。您不应该浪费这个查询,因为它需要时间。

因此,以后不要试图覆盖主查询,而是更改主查询以获得更快、更可靠的结果。

结束

相关推荐

在editags.php中使用多个id过滤分类术语

我想使用编辑标签。具有多个术语id的php搜索函数。例如,如果我在搜索框中键入以下内容:#1245&;6832,它应该在结果表(WP\\U terms\\U List\\U table)中显示这两个术语。我尝试使用pre\\u get\\u posts操作访问正在运行的搜索查询,但这只是显示一个“空”查询:add_action(\'pre_get_posts\', \'filter_terms_by_ids\' ); function filter_terms_by_ids( $w