WordPress函数-文章查询方法-WP_Query()

描述

WP_Query是wordpress提供的一个类,它支持的参数非常完善灵活,博主通过WP_Query类可以创建自己所需要的wordpress循环输出,比如调用最新文章、热门文章、自定义文章类型文章循环输出等,和query_posts()函数具有相同的查询功能,但优于query_posts()函数。

使用方法

<?php  
$args = array(
    // 用于查询的参数或者参数集合
); 
 
// 自定义查询
$the_query = new WP_Query( $args );
 
// 判断查询的结果,检查是否有文章
if ( $the_query->have_posts() ) :
 
    // 通过查询的结果,开始主循环
    while ( $the_query->have_posts() ) :
        $the_query->the_post(); //获取到特定的文章
 
        // 要输出的内容,如标题、日期等 
 
    endwhile;
endif;
 
// 重置请求数据
wp_reset_postdata(); 
?>

代码中$args是定义的参数变量,而变量$the_query是WP_Query类的一个实例,然后通过WP_Query的方法开始查询。

条件参数

<?php
$args = array(
    //作者参数 - 显示与某些作者相关的文章.
    'author'                 => '1,2,3,',                  //(int) -    使用作者ID [使用minus( - )通过ID EX排除作者. 'author' => '-1,-2,-3,']
    'author_name'            => 'luetkemj',                //(string) - 使用 'user_nicename' (NOT name)
    'author__in'             => array(2, 6),               //(array) -  使用作者ID. (可使用版本 3.7).
    'author__not_in'         => array(2, 6),               //(array)' - 使用作者ID. (可使用版本 3.7).
    //类别参数 - 显示与某些分类相关的文章.
    'cat'                    => 5,                         //(int) -    使用分类ID.
    'category_name'          => 'staff, news',             //(string) - 使用分类SLUG显示具有这些分类的文章.
    'category_name'          => 'staff+news',              //(string) - 使用分类SLUG显示具有"全部"的文章.
    'category__and'          => array(2, 6),               //(array) -  使用分类ID.
    'category__in'           => array(2, 6),               //(array) -  使用分类ID.
    'category__not_in'       => array(2, 6),               //(array) -  使用分类ID.
    //标签参数 - 显示与某些标签相关的文章.
    'tag'                    => 'cooking',                 //(string) - 使用标签别名.
    'tag_id'                 => 5,                         //(int)    - 使用标签ID.
    'tag__and'               => array(2, 6),               //(array) -  使用标签ID.
    'tag__in'                => array(2, 6),               //(array) -  使用标签ID.
    'tag__not_in'            => array(2, 6),               //(array) -  使用标签ID.
    'tag_slug__and'          => array('red', 'blue'),      //(array) -  使用标签别名.
    'tag_slug__in'           => array('red', 'blue'),      //(array) -  使用标签别名.
    //分类参数(自定义分类法) - 显示与某些分类有关的文章.
    //重要说明:tax_query需要一系列税收查询参数阵列(它需要数组)
    //此构造允许您使用第一个(外部)阵列中的关系参数来查询多个分类学,以描述分类查询之间的布尔关系.
    'tax_query'              => array( //(array) - 使用分类法参数 (可使用版本 3.1).
                                       'relation' => 'AND',                             //(string) -可能的值是 'AND' 或 'OR' 并且相当于为每个分类系统运行加入
                                       array(
                                           'taxonomy'         => 'color',               //(string) - 分类法.
                                           'field'            => 'slug',                //(string) - 选择分类法条款 ('id' 或 'slug')
                                           'terms'            => array('red', 'blue'),  //(int/string/array) - 分类法条款.
                                           'include_children' => true,                  //(bool) - 是否包括儿童分类分类.默认为 true.
                                           'operator'         => 'IN'                   //(string) - 操作员进行测试.可能的值是 'IN', 'NOT IN', 'AND'.
                                       ),
                                       array(
                                           'taxonomy'         => 'actor',
                                           'field'            => 'id',
                                           'terms'            => array(103, 115, 206),
                                           'include_children' => false,
                                           'operator'         => 'NOT IN'
                                       )
    ),
    //文章和页面参数 - 基于文章和页面参数显示内容.
    'p'                      => 1,                                 //(int) - 使用文章ID..
    'name'                   => 'hello-world',                     //(string) - 使用文章ID.
    'page_id'                => 1,                                 //(int) - 使用页面ID.
    'pagename'               => 'sample-page',                     //(string) - 使用页面别名.
    'pagename'               => 'contact_us/canada',               //(string) - 使用父页和子页面的SLUP显示子页面,分隔的BA斜杠
    'post_parent'            => 1,                                 //(int) - 使用页面ID.返回子页面. (仅适用于分层文章类型.)
    'post_parent__in'        => array(1, 2, 3),                    //(array) - 使用文章ID.指定父级位于数组中的文章.注意:在3.6中介绍
    'post_parent__not_in'    => array(1, 2, 3),                    //(array) - 使用文章ID.指定父级不在数组中的文章.
    'post__in'               => array(1, 2, 3),                    //(array) - 使用文章ID.指定文章以检索. 注意如果您使用粘贴文章,他们将被包含(前置!)在您检索您是否想要它的文章中. 抑制这种行为使用 ignore_sticky_posts
    'post__not_in'           => array(1, 2, 3),                    //(array) - 使用文章ID.指定文章不检索.  注意:您无法组合 'post__in' and 'post__not_in' 在同一查询中

    //////密码参数 - 基于文章和页面参数显示内容.请记住,默认Post_type仅设置为显示文章但不是页面.
    'has_password'           => true,                              //(bool) - 可使用版本 3.9
    //true  对于密码的文章;
    //false 对于没有密码的文章;
    //null  对于包含和没有密码的所有文章
    'post_password'          => 'multi-pass',                      //(string) - 显示具有特定密码的文章 (可使用版本 3.9)

    //////类型状态参数 - 显示与某些类型或状态相关的文章.
    'post_type'              => array( //(string/array) - 使用文章类型.通过文章类型检索文章,默认值是 'post';
                                       'post',                         // - 文章.
                                       'page',                         // - 页面.
                                       'revision',                     // - 修订.
                                       'attachment',                   // - 附件. 默认值 WP_Query 'post_status'=>'published', 但Atchments默认到 'post_status'=>'inherit' 所以你需要将状态设置为 'inherit' 或 'any'.
                                       'my-post-type',                 // - 自定义文章类型 (e.g. 电影)
    ),
    //注意: 用'any'most_type和post_status查询中可用的关键字不能在数组中使用.
    'post_type'              => 'any',                                // - 除了修订和类型之外的任何类型的检索 'exclude_from_search' 设置为true.
    //////类型和状态参数 - 显示与某些类型或状态相关的文章.
    'post_status'            => array(//(string / array) - 使用文章状态.通过文章状态检索文章,默认值i'publish'.
                                      'publish',                      // - 已发布文章或页面.
                                      'pending',                      // - 待审核文章或页面.
                                      'draft',                        // - 草稿文章或页面.
                                      'auto-draft',                   // - 系统草稿文章或页面.
                                      'future',                       // - 将来发布的文章.
                                      'private',                      // - 对于未登录的用户不可见.
                                      'inherit',                      // - 修订版本.
                                      'trash'                         // - 待删除的文章或页面 (可使用版本 2.9).
    ),
    //注意: 在 'any' Most_type和Post_Status查询中可用的关键字不能在数组中使用.
    'post_status'            => 'any',                                // - 除了从文章类型中检索的任何状态 'exclude_from_search' 设为ture.

    //////分页参数
    'posts_per_page'         => 10,                                   //(int) - 每页显示文章数量 (可使用版本 2.1). 使用 'posts_per_page' => -1 显示所有文章.注意: 如果查询处于Feed中,WordPress将使用存储的存储覆盖此参数 'posts_per_rss' option. 遍历限制,尝试使用 'post_limits' 筛选, 或过滤 'pre_option_posts_per_rss' 并返回 -1
    'posts_per_archive_page' => 10,                                   //(int) - 每个页面显示的文章数 - 仅在存档页面上.在页面上的页面上乘车显示anposts_per_page is_archive() or is_search() 将会 true
    'nopaging'               => false,                                //(bool) - 显示所有文章或使用分页.默认值为 'false', 使用分页.
    'paged'                  => get_query_var('paged'),               //(int) - 页数.当USInthe"旧条目"链接时,显示通常在第X页上显示的文章. 注意: 使用 get_query_var('page'); 如果您希望查询在您设置为静态页面的页面模板中工作.查询变量'页面'保存PageNumber以获取单个分页文章或页面,包括<!--nextpage-->QuickTag在文章内容中.
    'nopaging'               => false,                                //(boolean) - 显示所有文章或使用分页.默认值为 'false', 使用分页.
    'posts_per_archive_page' => 10,                                   //(int) - 每个页面显示的文章数 - 仅在存档页面上. 在页面上过度乘车文章和showposts is_archive() 或 is_search() 是真的.
    'offset'                 => 3,                                    //(int) - 替换或转移的文章数量.
    // 警告:设置偏移参数覆盖/忽略分页参数并断开分页.
    // 该 'offset' 参数忽略时 'posts_per_page'=>-1 (显示所有文章)使用.
    'paged'                  => get_query_var('paged'),               //(int) - 页数.当USInthe"旧条目"链接时,显示通常在第X页上显示的文章. 注意:整个寻呼的事情变得棘手.有些链接可以帮助你出去:
    'page'                   => get_query_var('page'),                                  //(int) - 静态前页的页数.显示通常在静态页面X上显示的文章. 注意:查询变量页面持有PageNumber以获取包含的单个分页文章或页面 <!--nextpage--> 仓库内容中的QuickTag.
    'ignore_sticky_posts'    => false,                                //(boolean) - 忽略置顶文章 (可使用版本 3.1, 替换Caller_Get_Posts参数). 默认值为0  - 不要忽略粘贴文章.注意:忽略/排除文章返回的文章开始时包含的粘滞文章,但粘滞邮件仍将以返回的文章列表列表的自然顺序返回.

    //////排序参数 - 排序检索到的文章.
    'order'                  => 'DESC',                               //(string) - 指定升序或下降顺序 'orderby' 参数. 默认: 'DESC'.
    //可能的值:
    //'ASC' - 从最低到最高值的升序顺序 (1, 2, 3; a, b, c).
    //'DESC' - 从最高到最低值的降序下降 (3, 2, 1; c, b, a).
    'orderby'                => 'date',                               //(string) - 按参数排序检索的文章.默认为"data".可以通过一个或多个选项. EX: 'orderby' => 'menu_order title'
    //可能的值:
    //'none' - 没有订单 (可使用版本 2.8).
    //'ID' - 按文章ID排序.注意大写.
    //'author' - 由作者排序.
    //'title' - 按标题排序.
    //'name' - 按文章名称(文章slug)排序.
    //'date' - 按修改日期排序.
    //'modified' - 排序最后修改日期.
    //'parent' - 按POST/PAGE父ID排序.
    //'rand' - 随机排序.
    //'comment_count' - 按评论数量排序 (可使用版本 2.9).
    //'menu_order' - 按页面顺序排序.最常用于页面(Edipage属性框中的订单字段)和附件(Insert/上传Medigallery对话框中的整数字段),但可以用于具有不同'menu_order'值的任何文章类型(THEALL默认为0) .
    //'meta_value' - 注意 'meta_key=keyname' 还必须存在于查询中.注意alsthat排序将是字母表的,这对于字符串(即单词)很好,但可以为数字绑定 (e.g. 1, 3, 34, 4, 56, 6, 等等, 而不是 1, 3, 4, 6, 34, 56 因为yomight自然期待).
    //'meta_value_num' - 按数字元值排序 (可使用版本 2.8). Also notthat a 'meta_key=keyname' 还必须存在于查询中.如上所述,该值允许NumericAsorting 'meta_value'.
    //'title menu_order' - 按menu_order..和title同时排序.
    //'post__in' - 保留文章ID排序 post__in array (可使用版本 3.5).

    //////日期参数 - 显示与某个时间和日期期间相关的文章.
    'year'                   => 2014,           //(int) - 年 (e.g. 2011).
    'monthnum'               => 4,              //(int) - 月 (from 1 to 12).
    'w'                      => 25,             //(int) - 周 (from 0 to 53). 使用MySQL Week命令.该模式依赖于"Start_of_week"选项.
    'day'                    => 17,             //(int) - 天 (from 1 to 31).
    'hour'                   => 13,             //(int) - 时 (from 0 to 23).
    'minute'                 => 19,             //(int) - 分 (from 0 to 60).
    'second'                 => 30,             //(int) - 秒 (0 to 60).
    'm'                      => 201404,         //(int) - 年月 (例如: 201307).
    'date_query'             => array(          //(array) - 日期参数 (可使用版本 3.7).
                                                //这些都是超级强大的.查看Codex以获取更多综合的代码示例
                                                array(
                                                    'year'      => 2014,                     //(int) - 年 (e.g. 2011).
                                                    'month'     => 4,                        //(int) - 月 (from 1 to 12).
                                                    'week'      => 31,                       //(int) - 周 (from 0 to 53).
                                                    'day'       => 5,                        //(int) - 天 (from 1 to 31).
                                                    'hour'      => 2,                        //(int) - 时 (from 0 to 23).
                                                    'minute'    => 3,                        //(int) - 分 (from 0 to 59).
                                                    'second'    => 36,                       //(int) - 秒 (0 to 59).
                                                    'after'     => 'January 1st, 2013',      //(string/array) - 检索文章的日期.接受strtotime() - 兼容字符串或数组 'year', 'month', 'day'
                                                    'before'    => array(                    //(string/array) - 检索文章的日期.接受strtotime() - 兼容字符串或数组 'year', 'month', 'day'
                                                                                             'year'  => 2013,                  //(string) 接受任何四位数年份.默认为空.
                                                                                             'month' => 2,                     //(string) 本年的月.接受数字 1-12. 默认: 12.
                                                                                             'day'   => 28,                    //(string) 本月的日.接受数字 1-31. 默认: 最后一天.
                                                    ),
                                                    'inclusive' => true,                 //(boolean) - 之后/之前,是否应匹配确切值'.
                                                    'compare'   => '=',                  //(string) - Possible values are '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' (only in WP >= 3.5), and 'NOT EXISTS' (also only in WP >= 3.5). Default value is '='
                                                    'column'    => 'post_date',          //(string) - 列查询.默认: 'post_date'.
                                                    'relation'  => 'AND',                //(string) - 或者,或者,如何比较子阵列.默认: AND.
                                                ),
    ),

    //////自定义字段参数 - 显示与某个自定义字段关联的文章.
    'meta_key'               => 'key',          //(string) - 自定义字段键.
    'meta_value'             => 'value',        //(string) - 自定义字段值.
    'meta_value_num'         => 10,             //(number) - 自定义字段值.
    'meta_compare'           => '=',            //(string) - 操作员测试 'meta_value'. 可能的值是 '!=', '>', '>=', '<', 或 ='. 默认值为 '='.
    'meta_query'             => array(          //(array) - 自定义字段参数 (可使用版本 3.1).
                                                'relation' => 'AND',                       //(string) - 可能的值是'AND','OR'.当有多个时,每个内部Meta_Query数组之间的逻辑关系.请勿与单个内部Meta_Query数组一起使用.
                                                array(
                                                    'key'     => 'color',                  //(string) - 自定义字段键.
                                                    'value'   => 'blue',                   //(string/array) - 自定义字段值(注意:阵列支持仅限于比较值 'IN', 'NOT IN', 'BETWEEN', 或 'NOT BETWEEN') 使用 WP < 3.9? 有关详细信息,请查看此页面
                                                    'type'    => 'CHAR',                   //(string) - 自定义字段类型.可能的值是 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'. 默认值为 'CHAR'. 该 'type' 日期与之合作 'compare' 值 BETWEEN 只有当日期以格式存储 YYYYMMDD 并用这种格式测试.注意: 该 'type' 日期适用于 'compare' 值 BETWEEN 只有当日期以格式保存 YYYYMMDD 并用这种格式测试.
                                                    'compare' => '='                       //(string) - 操作员进行测试.可能的值是'=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' (只有在WP. >= 3.5), 和 'NOT EXISTS' (也只有在 WP >= 3.5). 默认值为 '='.
                                                ),
                                                array(
                                                    'key'     => 'price',
                                                    'value'   => array(1, 200),
                                                    'compare' => 'NOT LIKE',
                                                )
    ),

    //////权限参数 - 如果用户具有适当的能力,则显示已发布的文章以及私有文章:
    'perm'                   => 'readable',         //(string) 可能的值是 'readable', 'editable'

    //////缓存参数
    //注意缓存是一件好事.通常不建议将这些设置为false.
    'cache_results'          => true,               //(bool) 默认为真实 - 文章信息缓存.
    'update_post_term_cache' => true,               //(bool) 默认为真实 -  文章Meta信息缓存.
    'update_post_meta_cache' => true,               //(bool) 默认为TRUE  - 文章条款信息缓存.

    'no_found_rows' => false,                       //(bool) 默认为false. WordPress在大多数查询中使用SQL_CALC_FOUND_ROWS以实现分页.即使你根本不需要分页.通过将此参数设置为true,您将告诉WordPress不计算总行并减少DB上的负载.当此参数设置为true时,分页将无法正常工作.

    //////搜索参数
    's'             => $s,                               //(string) - 从搜索中沿查询字符串变量传递.
    'exact'         => true,                             //(bool) - flag 要使它只匹配整个标题/文章 - 默认值为false.
    'sentence'      => true,                             //(bool) - LOGO使其执行短语搜索 - 默认值为false.

    //////文章字段参数
    'fields'        => 'ids',                              //(string) - 哪个字段返回.默认情况下返回所有字段.
    //可能的值:
    //'ids'        - 返回一系列文章ID.
    //'id=>parent' - 返回关联数组 [parent => ID, …].
    //传递其他任何东西都将返回所有字段(默认值) - 文章对象数组.

);
?>
喜欢就支持以下吧
倾尘SEO
  • 本文由 倾尘SEO 发表于 2021年7月20日
  • 转载请务必保留本文链接:https://www.qcwlseo.com/wp_query.html
 评论   0   访客   0