掌握WP_Query:相关功能

嗨,欢迎来到本系列的第二部分,即“ Mastering WP_Query”。 在第一部分中,我们从简单介绍WP_Query类是一个系列开始。 在第二部分中,我们将学习与WP_Query相关的功能。

让我们开始!

通过函数,操作和过滤器来利用WP_Query的功能

我不是编程专家,但是我可以看到WP_Query类是MVC模式的最佳示例之一。 一旦掌握了基础知识,它就非常强大,完全可扩展并且非常易于使用。

除了其属性,方法和参数(我们将在以后进行介绍)之外,WordPress还提供了额外的函数和挂钩(意味着动作和过滤器)来与WP_Query类一起使用。 在本教程中,我们将了解这些函数,在下一部分中,我们将看到与WP_Query相关的操作和过滤器。 如果您发现我忘记了什么,请随时发表评论来通知我。

WP_Query相关功能

WP_Query类可使用13个WordPress函数,这些函数可以帮助您利用WP_Query 。 他们不需要任何介绍,所以我们开始:

获取公共查询变量: get_query_var()

我们第一个函数的名称确实说明$wp_query :它接受全局$wp_query对象并$wp_query检索公共查询变量。 它有两个参数:第一个是返回其值的变量,第二个是未设置变量时返回的默认值:

<?php

$paged = get_query_var( 'paged', 1 );

?>

影响主循环: query_posts()

老实说,这是一个不好的功能。 您实际上根本不需要使用它,但是为了告诉“正确的方法”,我们将介绍它,并告诉您这是“错误的方法”。

query_posts()是通过将主查询放在一边并运行新查询来更改主查询的函数-您需要使用wp_reset_query()在此之后进行清理。

<?php

query_posts( 'category_name=news' );

?>

此功能是WordPress核心中最常被滥用的功能之一。 您不应该使用它来创建辅助查询-您可以使用WP_Query类或get_posts()函数(我们将在本教程的后面部分讨论)。 您也不应使用它来更改主查询,而应使用pre_get_posts操作(我们将在后面讨论)。 甚至食品法典委员会也阻止我们使用它,并显示了替代方案。

底线:请勿使用。

获得一个帖子: get_post()

另一个不言自明的函数是get_post() ,您可以使用该函数获取单个帖子。 它具有三个可选参数:

  • 第一个是帖子ID(或默认情况下当前帖子的ID)。
  • 第二个是您将获得的结果类型: OBJECTARRAY_A (关联数组)或ARRAY_N (数字数组)。
  • 第三个是过滤结果的选择。 默认值为'raw'因此除非将其设置为'edit''display''attribute''js' ,否则不会对其进行过滤。
<?php

$first_post = get_post( 1, ARRAY_A );
$post_title = $first_post[ 'post_title' ];

?>

将查询保存到数组: get_posts()

get_posts()函数使我们可以运行查询并将其另存为数组以在各种地方使用。 它需要与WP_Query相同的参数,因此您可以根据需要自定义查询。 (我们将在以后查看WP_Query的参数,敬请WP_Query !)这是创建帖子列表的最佳,最有效的方法,但不是循环。

<?php

$args = array(
    'category_name' => 'news',
    'order' => 'ASC',
    'orderby' => 'post_title',
    'posts_per_page' => -1
);

// Return an array of all posts in the "news" category.
$all_posts_list = get_posts( $args );

?>

尽管可以使用此函数毫无问题地运行“辅助查询”,但食典委建议在创建多个循环时使用WP_Query ,在获取帖子列表时建议使用get_posts()Peter R. Knight用简单的术语解释了get_posts()WP_Query之间的区别 :主要区别是WP_Query进行更多的数据库查询(发布数据,元数据,作者数据和评论数据),而get_posts()仅进行一个查询(发布)数据)。

获取页面: get_pages()

这个奇数函数的目的是获取页面列表,尽管它具有post_type参数,该参数还可以让您选择其他帖子类型(前提是该帖子类型是分层的,否则返回false )。

<?php

$args = array(
    'sort_order' => 'ASC',
    'sort_column' => 'post_title',
    'hierarchical' => 1,
    'exclude' => '',
    'include' => '',
    'meta_key' => '',
    'meta_value' => '',
    'authors' => '',
    'child_of' => 0,
    'parent' => -1,
    'exclude_tree' => '',
    'number' => '',
    'offset' => 0,
    'post_type' => 'page',
    'post_status' => 'publish'
);

$pages = get_pages( $args );

?>

它接受与WP_Query的参数非常相似的参数,但它们略有不同:

  • sort_order :按升序( asc )还是降序( desc )排序页面。
  • sort_column :如何对页面进行排序。 接受post_titlemenu_orderpost_datepost_modifiedIDpost_authorpost_name
  • hierarchical :是否按层次结构列出页面( 1 )( 0 )。
  • exclude :以逗号分隔的列表或要从列表中排除的页面ID数组。
  • include :以逗号分隔的列表或页面ID数组,可从列表中包含并排除其他所有内容。
  • meta_key :与meta_value参数一起使用时,它仅包含具有已定义的meta键和值的页面。
  • meta_value :与meta_key参数一起使用时,它仅包含具有已定义的meta键和值的页面。
  • authors :用逗号分隔的作者ID列表。
  • child_of :页面的ID,仅可获取列表中的子代和孙代。
  • parent :列出具有提供的页面ID作为父页面的页面。 为了使此参数起作用,必须将hierarchical参数设置为0
  • exclude_tree :用逗号分隔的列表或要与其子级排除的页面ID数组。
  • number :要获取的页面数。
  • offset :从顶部跳过的页面数。
  • post_type :要查询的帖子类型。 自然,它默认为page
  • post_statuspost_status逗号分隔的帖子状态类型列表。

检查查询是否返回帖子: have_posts()

在不接受任何参数的情况下,如果查询返回任何记录,则此函数仅返回TRUE否则返回FALSE

<?php

if ( have_posts() ) {
    
    // Success.
    
} else {
    
    // Failure.
    
}

?>

工作循环: the_post()

食典委说 ,它“在循环中重复发布索引”。 它完成了几件事:

  1. 它从查询中获取下一条记录。
  2. 它设置$post数据。
  3. 它将in_the_loop参数设置为TRUE
<?php

if ( have_posts() ) {

    while ( have_posts() ) {

        the_post();

        the_title();

        the_content();

    }
    
}

?>

设置$postsetup_postdata()

此函数也说明了一切:它设置了全局发布数据。 让我们看看法典对此有何评论:

setup_postdata()填充全局变量$id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages$id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages ,这些变量可帮助许多模板标签在当前发布上下文中工作。 它没有分配全局$post变量,但似乎希望它的参数是对它的引用。

<?php

global $post;

setup_postdata( $post );

?>

清除当前循环: rewind_posts()

另一个函数,其名称说明其功能:此函数仅“倒带”循环,以便您以后可以再次运行它。

<?php

// After the loop.
rewind_posts();

?>

重置$postwp_reset_postdata()

此函数将全局$post变量重置回主查询中的第一条帖子。 最好在辅助查询后使用此选项。

<?php

// After a secondary query.
wp_reset_postdata();

?>

重置查询: wp_reset_query()

如果更改了主查询(使用query_posts()函数或pre_get_posts操作(我们将在下一部分中看到query_posts()pre_get_postspre_get_posts ,以便可以重置主查询。

<?php

// After the main query is altered.
wp_reset_query();

?>

检查当前查询是否为主要查询: is_main_query()

这是一个条件标记 ,如果当前查询是主查询,则返回TRUE否则返回FALSE 。 简单吧?

<?php

if ( is_main_query() ) {
    
    // Success.
    
} else {
    
    // Failure.
    
}

?>

检查我们是否处于循环中: in_the_loop()

另一个条件标记是in_the_loop() ,如果您的代码是否在循环内运行,则仅返回TRUEFALSE

<?php

if ( in_the_loop() ) {
    
    // Success.
    
} else {
    
    // Failure.
    
}

?>

第二部分结束

WP_Query —现在(可能)您知道与WP_Query相关的所有功能! 请继续关注下一部分,我们将在其中学习与WP_Query相关的操作和过滤器。

您对此部分有任何意见或补充吗? 请在下方评论,随时分享您的想法。 而且,如果您喜欢这篇文章,请不要忘记与您的朋友分享!

翻译自: https://code.tutsplus.com/tutorials/mastering-wp_query-related-functions--cms-22951

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值