为什么在循环的这个变体上只有一个帖子(没有分页)?

时间:2013-10-17 作者:Eric

这是我的WP循环:

// fetch latest news stories
$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
$posts = get_posts(array(
    \'numberposts\' => 3,
    \'paged\' => $paged,
));

// show results
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post(); 
        // display info about the post
    }
}
问题是:只显示第一篇文章,而分页根本不显示。

有趣的是,我使用了相同的代码(来自// show results 向下,因为Wordpress将帖子设置为自动显示搜索结果)以在我的搜索页面上显示结果,它工作得很好。

我想使用相同的显示代码(同样,从// show results 向下)在所有与我的博客相关的归档页面上:日期归档、主博客页面、基于标记的归档等。

我只需要它显示多个帖子,让我的分页显示。。。

1 个回复
SO网友:s_ha_dum

get_posts returns an array post对象的。您不能使用WP_Query 对象方法。即使可以,循环也会使用global 变量$wp_query 因为你没有告诉它做任何不同的事情。和showposts 早就不推荐使用了。换言之,您的代码在几个不同的方面被破坏或有缺陷。

你可以使用foreach 在阵列上循环。

$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
$posts = get_posts(array(
    \'numberposts\' => 3,
    \'paged\' => $paged,
));
// show results
foreach ($posts as $p) {
  echo $p->post_title;
}
你可以打败全球$wp_query 对象

$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
$wp_query = new WP_Query(array(
    \'numberposts\' => 3,
    \'paged\' => $paged,
));
// show results
if ( have_posts() ) {
    while ( have_posts() ) {
        the_post(); 
        the_title();
        // display info about the post
    }
}
或创建新的WP_Query 对象:

$paged = (get_query_var(\'page\')) ? get_query_var(\'page\') : 1;
$my_query = new WP_Query(array(
    \'numberposts\' => 3,
    \'paged\' => $paged,
));
// show results
if ( $my_query->have_posts() ) {
    while ( $my_query->have_posts() ) {
        $my_query->the_post(); 
        the_title();
        // display info about the post
    }
}
或者,可以在上创建一个过滤器pre_get_posts 更改主查询。如果希望分页工作正常,这是最好的选择。

add_action(
  \'pre_get_posts\',
  function($qry) {
    if ($qry->is_main_query()) {
      $qry->set(\'posts_per_page\',3);
    }
  }
);

结束

相关推荐

Pagination Doesn't Work

I created myfile.php with the following content:global $paged; if ( get_query_var( \'paged\' ) ) { $paged = get_query_var( \'paged\' ); } else if ( get_query_var( \'page\' ) ) { $paged = get_query_var( \'page\' ); } else {