WordPress 文章查询教程5:如何使用分页相关的参数

在 WordPress 中,使用 WP_Query 进行文章查询是最常见的操作,学习好这方面的操作, 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篇文章:

$query = new WP_Query( array( 'posts_per_page' => 3 ) );

在一页上显示所有文章:

$query = new WP_Query( array( 'posts_per_page' => -1 ) );

通过屏蔽分页来显示所有文章:

$query = new WP_Query( array( 'nopaging' => true ) );

从第4篇文章开始显示:

$query = new WP_Query( array( 'offset' => 3 ) );

每页显示5篇文章,然后偏移最近的三篇:

$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 3 ) );

显示第6页的文章:

$query = new WP_Query( array( 'paged' => 6 ) );

显示当前页的文章:

$query = new WP_Query( array( 'paged' => get_query_var( 'paged' ) ) );

如果设置了 paged 参数,则显示当前页的文章,未设置,则第一页的文章。

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );

如果你想 get_query_var('page') 在页面模板中也能生效,那首先要设置该页为静态首页。因为 'page' 查询变量同时也是用于文章或者页面的内容中含有 <!--nextpage--> 中用于页面导航。

在静态首页显示当前页面的文章:

$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );

仅显示第一篇置顶文章:

$sticky = get_option( 'sticky_posts' );
$query = new WP_Query( array( 'p' => $sticky[0] ) );

仅显示第一篇置顶文章,如无则显示第一篇发布的文章:

$args = array(
    'posts_per_page'      => 1,
    'post__in'            => get_option( 'sticky_posts' ),
    'ignore_sticky_posts' => 1,
);
$query = new WP_Query( $args );

仅显示第一篇置顶文章,如无则返回空:

$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...
}

排除所有置顶文章:

$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );

©我爱水煮鱼,本站推荐使用的主机:阿里云,国外主机建议使用BlueHost

本站长期承接 WordPress 优化建站业务,要求很高,有兴趣请联系微信:「chenduopapa」或微信公众号:「WordPress果酱」。

标签: WordPress 教程

热门文章