每页数更改帖子


14

在wordpress 设置 => 阅读 => 博客页面中最多显示 [输入字段] 个帖子

目前,我将其设置为3个帖子。

在我的索引上,日期档案,标签档案,类别档案,搜索结果等...所有使用循环和分页的页面,现在每页显示3个帖子。

我的目标是针对不同的页面获得不同数量的结果。在我的索引上可能有3条帖子,但是在搜索结果或档案上,每页显示不同数量的结果。

任何想法如何做到这一点?

Answers:


23

可以做到这一点:(添加到主题的functions.php中)

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  global $wp_the_query;

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

  return $query;
}

set一种方法$query吗?
罗特威克·甘古德

@RutwickGangurde是的。实际上,is_search()和is_archive()也是,现​​在通过用这篇很棒的文章收集的信息更新我的答案后,现在变得更加清晰:billerickson.net/customize-the-wordpress-query该文章还指出,我们在WP3.3中将具有$ wp_query-> is_main_query()方法,这非常酷。
戴夫·罗姆西

真棒!非常感谢您的精彩帖子。我从来都不知道这些方法,我曾经深入研究对象/数组以更改/设置值。非常适合即时入侵!为您+1!
罗特威克·甘古德

从什么时候开始,如果is_admin仪表板永远不需要更改它?看起来它不同步WP中屏幕选项中的“每页项目数:”,可能会导致您无法翻页。
NoBugs

0

改进上面的答案:挂钩pre_get_posts是通过引用获取的,因此不需要global调用或return调用。

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

}

您的代码也存在问题,因为使用全局$ wp_query会浪费内存,但您无法调用未定义的各种$ wp_the_query
Abdulkabir Ojulari

0

使用$ GLOBALS ['wp_query']或仅使用$ wp_query

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  if ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_query'] ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_the_query'] ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }

  return $query;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.