WordPress 中自定义 wp_query 的分页需要 404 错误页面

Posted

技术标签:

【中文标题】WordPress 中自定义 wp_query 的分页需要 404 错误页面【英文标题】:Pagination on custom wp_query in WordPress takes to 404 error page 【发布时间】:2014-04-17 08:11:47 【问题描述】:

我有一个带有 wp_query 的循环,代码如下:

<?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query("showposts=2&paged=$paged");
?>

<?php if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
    <?php the_title() ?>
<?php endwhile; ?>
<?php else: ?>
    <article>
        <h2><?php _e( 'Sorry, nothing to display.', 'theme' ); ?></h2>
    </article>
<?php endif;  my_pagination(); wp_reset_query()?>

标准分页:

<?php 
function my_pagination()

    global $wp_query;
    $big = 999999999;
    echo paginate_links(array(
        'base' => str_replace($big, '%#%', get_pagenum_link($big)),
        'format' => '?paged=%#%',
        'current' => max(1, get_query_var('paged')),
        'prev_text'    => __('<i class="fa fa-chevron-left"></i>'),
        'next_text'    => __('<i class="fa fa-chevron-right"></i>'),
        'total' => $wp_query->max_num_pages,
    ));

?>

分页在页面上显示正确,但是每当我点击分页链接时,它都会将我带到错误页面。

现在什么都试过了,不知道是什么原因。

非常感谢艾米的帮助

【问题讨论】:

当您将鼠标悬停在第 2 页的分页链接上时,URL 是什么? localhost/web/main/blog/page/2 谢谢 所以你的分页输出看起来不错。问题必须与您的实际查询有关。您可以尝试删除 $wp_query->query("showposts=2&paged=$paged");然后看看你是否可以访问第 2 页 @henrywright,我已经完成了那一点,然后返回一个空循环。有趣的是,当我将 Setting->Reading 更改为较小的量时,似乎会对我的循环产生影响。我每页设置了 5 个项目。只有 7 个帖子,分页显示 3 页。似乎它忽略了 wp_query 但第三页显示 404。我现在迷路了。 如果您删除我建议的代码:$wp_query-&gt;query("showposts=2&amp;paged=$paged"); 并将$wp_query = new WP_Query(); 更改为$wp_query = new WP_Query( 'posts_per_page=2' ); 会返回一些结果吗?有了这个,你的分页应该工作 【参考方案1】:

也遇到了困难 :) 当我意识到每页码计算出的帖子错误时,搜索起来更容易了,这是一个魔术:(添加到 functions.php 中)

function my_post_count_queries( $query ) 
  if (!is_admin() && $query->is_main_query())
    if(is_home())
       $query->set('posts_per_page', 1);
    
  

add_action( 'pre_get_posts', 'my_post_count_queries' );

【讨论】:

像魅力一样工作。谢谢@Michal S 这真是太棒了,他们保留了这么多后门来渗透输出,这就是我喜欢 wp 的原因 ;) +1 它显示分页链接,但点击链接后显示404。请帮助我。 这对我有帮助,谢谢!!我搜索了很多答案,如果我从我的 WP_Query 中取出 posts_per_page 并将它贴在这里,这个答案就可以了!! “s”不能用关键字$query-&gt;set('s',$_GET["search"]');搜索,这里会出现404错误。你能建议一下吗?【参考方案2】:

自定义帖子类型有同样的问题。我有一个关于“页面模板”的查询,其中分页带有 404。我想这里的主要问题是自定义帖子类型的“slug”与“页面模板”url 相同。例如,如果您有一个自定义帖子类型 slug 'portfolio' 和一个具有相同名称的页面,则该页面上的分页会给出 404。所以我只是将 'slug' 更改为 'archives-portfolio' 并且它有所帮助

【讨论】:

我找到的最佳答案 :) 谢谢!!【参考方案3】:

您可以更改您的查询

$wp_query= null; $wp_query = new WP_Query();
$wp_query->query("showposts=2&paged=$paged");

$wp_query = new WP_Query("showposts=2");

每页显示 2 个帖子,您可以查看和访问您的第 2 页。

【讨论】:

根据官方文档:codex.wordpress.org/Class_Reference/WP_Query ... posts_per_page (int) - 每页显示的帖子数(从 2.1 版开始可用,替换了 showposts 参数)。使用 'posts_per_page'=>-1 显示所有帖子('offset' 参数被 -1 值忽略)。如果在使用此参数后关闭分页,则设置 'paged' 参数。注意:如果查询在提要中,wordpress 会使用存储的“posts_per_rss”选项覆盖此参数。要重新设置限制,请尝试使用“post_limits”过滤器,或过滤“pre_option_posts_per_rss”并返回 -1

以上是关于WordPress 中自定义 wp_query 的分页需要 404 错误页面的主要内容,如果未能解决你的问题,请参考以下文章

php Wordpress Bootstrap 4.1分页(使用自定义WP_Query()和全局$ wp_query支持)

php Wordpress Bootstrap 4.1分页(使用自定义WP_Query()和全局$ wp_query支持)

Wordpress:WP_Query 如何使用自定义帖子类型应用搜索条件

WordPress自定义查询WP_Query使用方法大全

自定义 wp_query 上的 Wordpress 分页(next_posts_link)未显示

WordPress:如何使用 $wp_query 按类别过滤帖子?