这个我差不多做完了,只剩下一个小问题。希望你能帮助我。
我有两个非常简单的自定义循环。一个用于粘性贴子,一个用于非粘性贴子。我已经设法使粘性帖子只显示在第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 ?>
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 post 和this Codex.希望有帮助:)