在 WordPress 中,使用 WP_Query
进行文章查询是最常见的操作,学习好这方面的操作, WordPress 开发基本就学会了一半。
「WordPress果酱」将通过一系列教程讲解如何使用 WP_Query
进行 WordPress 文章查询。
我写这一系列文章的目的也是为了方便自己使用这些参数的时候方便查询,所以如果你也是经常进行 WordPress 二次开发的话,建议收藏本文。
第五讲关于分页相关的参数,分页相关的参数比较多,先简单罗列一下:
- nopaging (boolean) – 如果为 true 则显示所有文章,false 则分页显示,默认为 false。
- posts_per_page (int) – 每页显示的文章数量。使用 'posts_per_page'=>-1 则显示所有文章(此时 "offset" 参数将被忽略)。注意:如果 feed 中,则 WordPress 会使用存储的 "posts_per_rss" 选项覆盖此参数。
- posts_per_archive_page (int) – 设置存档页面每页显示的文章数量。当模板函数
is_archive()
和is_search()
为 true 时会覆盖 posts_per_page 参数。 - offset (int) – 设置偏移的文章数量。特别注意:设置偏移量参数会覆盖/忽略 paged 参数,并破坏分页,并且 "posts_per_page" 为-1(显示所有文章)时,offset 参数会被忽略。
- paged (int) – 第几页。使用“较早的文章”链接时,显示通常仅在X页上显示的文章。
- page (int) – 静态首面的第几页,显示通常仅在静态首页的第X页上显示的文章。
- ignore_sticky_posts (boolean) – 忽略置顶的文章,默认为 false,不忽略,就是在文章列表前面显示置顶文章。
每页显示3篇文章:
代码语言:javascript复制$query = new WP_Query( array( 'posts_per_page' => 3 ) );
在一页上显示所有文章:
代码语言:javascript复制$query = new WP_Query( array( 'posts_per_page' => -1 ) );
通过屏蔽分页来显示所有文章:
代码语言:javascript复制$query = new WP_Query( array( 'nopaging' => true ) );
从第4篇文章开始显示:
代码语言:javascript复制$query = new WP_Query( array( 'offset' => 3 ) );
每页显示5篇文章,然后偏移最近的三篇:
代码语言:javascript复制$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 3 ) );
显示第6页的文章:
代码语言:javascript复制$query = new WP_Query( array( 'paged' => 6 ) );
显示当前页的文章:
代码语言:javascript复制$query = new WP_Query( array( 'paged' => get_query_var( 'paged' ) ) );
如果设置了 paged 参数,则显示当前页的文章,未设置,则第一页的文章。
代码语言:javascript复制$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );
如果你想 get_query_var('page')
在页面模板中也能生效,那首先要设置该页为静态首页。因为 'page' 查询变量同时也是用于文章或者页面的内容中含有 <!--nextpage-->
中用于页面导航。
在静态首页显示当前页面的文章:
代码语言:javascript复制$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );
仅显示第一篇置顶文章:
代码语言:javascript复制$sticky = get_option( 'sticky_posts' );
$query = new WP_Query( array( 'p' => $sticky[0] ) );
仅显示第一篇置顶文章,如无则显示第一篇发布的文章:
代码语言:javascript复制$args = array(
'posts_per_page' => 1,
'post__in' => get_option( 'sticky_posts' ),
'ignore_sticky_posts' => 1,
);
$query = new WP_Query( $args );
仅显示第一篇置顶文章,如无则返回空:
代码语言:javascript复制$sticky = get_option( 'sticky_posts' );
$args = array(
'posts_per_page' => 1,
'post__in' => $sticky,
'ignore_sticky_posts' => 1,
);
$query = new WP_Query( $args );
if ( $sticky[0] ) {
// insert here your stuff...
}
排除所有置顶文章:
代码语言:javascript复制$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );