使POSTS_PER_PAGE值在所有页面上都相同

时间:2012-04-15 作者:Keat

这个我差不多做完了,只剩下一个小问题。希望你能帮助我。

我有两个非常简单的自定义循环。一个用于粘性贴子,一个用于非粘性贴子。我已经设法使粘性帖子只显示在第1页上,而不显示在其余页面上(使用分页时),这正是我想要的。问题是:如果我将posts\\u per\\u page设置为8,并且数据库中有1篇粘性文章,那么第一页上会有9篇文章,其余页面上会有8篇文章。

我已在循环之间使用此脚本成功更改了posts\\u per\\u page值:

$postcount = $wp_query->post_count; 
$postnumber = 8; 
if ( $paged != True ){ $postnumber = $postnumber - $postcount; }
这几乎奏效了。如果我在第一页上有1篇粘性文章和15-9篇文章,然后单击“下一步”按钮,WP将跳过第#8篇文章,只在下一页显示7-1篇文章。

这是我的代码:

<!-- Sticky -->
<?php if ( $paged != True ): ?>
    <?php $wp_query = new WP_Query(array(\'post__in\' => get_option(\'sticky_posts\'), \'category_name\' => Work)); ?>
        <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
            <?php get_template_part( \'loop\', \'index\' ); ?>
        <?php endwhile; ?>
    <?php wp_reset_postdata(); // reset the query ?>
<?php endif ?>

<?php 
$postcount = $wp_query->post_count; 
$postnumber = 8; 
if ( $paged != True ){ $postnumber = $postnumber - $postcount; }
?>

<!-- Non-Sticky -->
<?php $wp_query = new WP_Query(array(\'post__not_in\' => get_option(\'sticky_posts\'), \'category_name\' => Work, \'posts_per_page\' => $postnumber, \'paged\' => $paged)); ?>
    <?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
        <?php get_template_part( \'loop\', \'index\' ); ?>
    <?php endwhile; ?>
<?php wp_reset_postdata(); // reset the query ?>

2 个回复
SO网友:Stephen Harris

问题是,在你的第一页上,你要求,比如说,7篇“正常”的帖子。因此,它会显示最新的7条帖子:例如15-9条。

在第二页,你告诉WordPress我希望每页8篇文章,我希望第二页。内部逻辑是,如果你每页有8篇文章,而你在第二页,那么你需要第9到16篇文章(在这种情况下,第9篇文章是7篇,因为它是按日期排序的)。

您可以手动设置偏移量来更正此问题,但需要知道第一页上出现了多少“正常”帖子。无论如何。。。

关于在顶部发布粘性帖子,WordPress应该为您做到这一点。也就是说,如果省略post__not_in 属性,则粘性帖子应显示在顶部,并且每个页面的帖子数量相同。除非这是针对页面模板的,否则您不需要运行自己的查询。

关于您发布的代码:

避免使用变量$wp_query - 这就是WordPress所称的页面“主查询”is_paged()tax_query 而不是“category\\u name”pre_get_posts 钩子在查询到达之前对其进行更改。看见this postthis Codex.

SO网友:3dolab

嗯,我也有同样的需要,我只是简单地将第一个循环中的粘性帖子添加到一个数组中。。。

$stickyposts[] = get_the_ID();
然后在第二个循环中使用

\'posts_per_page\' => 8-count($stickyposts)
这似乎奏效了。

结束

相关推荐

The pagination doesn't work

我已经创建了一个新的WordPress主题,我完成了。。但我有一个问题。我无法进行分页。我使用“wp paginate”插件,并在索引中添加了以下代码。php:<?php if(function_exists(\'wp_paginate\')) { wp_paginate(); } ?> 但这对我的网站不起作用。前端和标记中仍然没有任何内容。我能做什么?这是我的索引。php: <?php get_header(); ?>