主页上的帖子数量不同于分页页面

时间:2012-11-27 作者:Justice Is Cheap

我在这里和谷歌上做了一些搜索,但我发现的一切都不正常。我希望在这里发布我的代码,并在哪里出错得到帮助。

在我网站的索引页上,我有一篇“特色”帖子,它的布局与其他帖子不同。当你点击下一页时,那篇特色文章消失了,给我留下了不均衡的帖子数量,我需要一个均衡的帖子数量。这是我找到的代码,我试着毫不费力地实现了它。

我正在使用以下查询(计数代码和下面的所有其他查询都是相同的):

<?php
  $page = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
  query_posts("paged=$page&posts_per_page=10"); 
?>
这是我希望能够使用的代码:

<?php
$page = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$page_num = $paged;
    if ($pagenum=\'\') $pagenum = 1;
    if ($pagenum > 1) { $post_num = 10 } else { $post_num = 9 }
query_posts(\'showposts=\'.$post_num.\'&paged=\'.$page_num); `
?>
这与页面的其余部分相同:

<?php $count = 1; ?>

<?php while (have_posts()) : the_post(); ?>

<?php if ((!is_paged()) && ($count == 1 )){  ?>

 // FEATURED HTML HERE

<?php } else {  ?>

 // REGULAR HTML HERE

<?php } $count++; ?>

<?php endwhile; ?>

// PAGINATION HERE

2 个回复
SO网友:curtismchale

您应该使用pre_get_posts 滤器您可以使用排除主页! is_front_page! is_home 取决于您的配置。

/**
 * Changes the number of posts per page if not is_home
 *
 * @author  SFNdesign, Curtis McHale
 */
function wptt_change_posts_on_page( $query ) {
    if ( ! is_home() && $query->is_main_query() ) {
        $query->set( \'posts_per_page\', \'10\' );
    }
}
add_action( \'pre_get_posts\', \'wptt_change_posts_on_page\' );
正如我所说,您可能需要使用! is_front_page 取决于主题的设置方式。这里有一篇很好的博客文章,详细解释了这些条件。

http://wpthemetutorial.com/2011/12/12/clearing-up-confusion-about-is_home-and-is_front_page/

哦,永远不要使用query_posts, 评估。https://developer.wordpress.com/2012/05/14/querying-posts-without-query_posts/

SO网友:Johannes Pille

您在第二个片段中提出的逻辑是有道理的。尽管如此,您的代码仍存在一些问题。

首先$pagenum 变量是冗余的,您不需要它。对于另一个,您可以指定get_query_var()$page 然后在以下行中使用$paged - 你希望它是一样的。应执行以下操作:

$paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
$post_num = ($paged > 1) ? 10 : 9;
// query for posts
此外,在标记片段(问题的第三个)中,$count 不需要,只需使用$paged 也顺便说一句,为了完整起见,我不会使用这么多的php开始和结束标记,但这是一个品味问题,不会影响代码的功能。

还有一点:除非这是主循环,否则应该使用WP_Query 类而不是query_posts. 如果是,使用query_posts 虽然没有那么错,但还是建议您查看pre_get_posts 改为过滤。

结束

相关推荐

我可以使用PRE_GET_POSTS函数通过元键排除POST吗?

我看到很多人更喜欢使用pre_get_posts 钩子代替query_posts. 下面的代码可以工作并显示所有具有元键“特色”的帖子function show_featured_posts ( $query ) { if ( $query->is_main_query() ) { $query->set( \'meta_key\', \'featured\' ); $query->set( \'meta_value\', \'