如何在Wordpress中动态更改每页的帖子数量

  • 本文关键字:Wordpress 动态 php wordpress
  • 更新时间 :
  • 英文 :


我想改变在我的wordpress站点的某些页面上显示的帖子数量。

我在这里找到了以下代码片段:
$postsPage = $settings["postspage"];
query_posts('posts_per_page='.$postsPage); 

之前调用if (have_posts()) while (have_posts()) the_post()

我对php很不熟悉,但我尝试的是类似

的东西
...
if ( is_front_page()) {
$postsPage = $settings["postspage"] + 1;
}elseif ( is_tag()) {
$postsPage = $settings["postspage"] - 2;
} else {
$postsPage = $settings["postspage"];
}
query_posts('posts_per_page='.$postsPage); 
...

,但不幸的是它不工作。相反,它只返回首页的1篇文章,而不是WP菜单中设置的5篇+ 1。我可以硬编码所需的值,例如is_front_page的$postPage = 6;,它的工作没有问题。由于某些原因,我不能从$settings["postspage"]给出的值中添加/减去任何东西。如果我不改变值(else-子句),它也可以工作。我错过了什么?

我已经尝试将$settings["postspage"]的值转换为整数,因为我认为它可能作为字符串返回。我使用:$postsPage = (int)$settings["postspage"] + 1;$postsPage = intval($settings["postspage"]) + 1;,但没有成功。因为我不是很熟悉wordpress的功能和它们的变量,我一直在寻找为什么我不能修改帖子的数量。我感谢任何提示!

不清楚你把代码放在哪里,以及你如何找到$settings,但这应该工作。

add_action( 'pre_get_posts', 'alter_number_of_posts' );
function alter_number_of_posts( $query ) {
if ( !$query->is_main_query() ){
return;
}
$posts_per_page = get_option( 'posts_per_page' );
if ( is_front_page() ) {
$query->set( 'posts_per_page', $posts_per_page + 1 );
return;
}
if ( is_tag() ) {
$query->set( 'posts_per_page', $posts_per_page - 2 );
return;
}
}

$query是通过引用传递的,因此对它所做的任何更改都将反映在全局查询对象中。您不需要返回它,这意味着您可以安全地从每个条件中的函数返回,而不是使用elseif

最新更新