为什么在粘帖发布查询中忽略_Sticky_POST

时间:2017-03-22 作者:吉 宁

我们都知道,ignore\\u sticky\\u posts用于从自定义查询中排除sticky post。

但为什么要在codex页面上https://codex.wordpress.org/Sticky_Posts, 他们在查询粘性帖子时使用ignore\\u sticky\\u posts??

$args = array(
\'posts_per_page\' => 1,
\'post__in\'  => get_option( \'sticky_posts\' ),
\'ignore_sticky_posts\' => 1
);
$query = new WP_Query( $args );
这太令人困惑了,没有任何意义,你想要它,却又把它排除在外?

2 个回复
最合适的回答,由SO网友:Fayaz 整理而成

我们都知道ignore_sticky_posts 用于从自定义查询中排除粘性帖子。

-不,这个假设是错误的

什么ignore_sticky_posts 意思是:即使在自然英语中,ignore_sticky_posts 听起来WordPress应该忽略查询中的所有粘性帖子,实际上WordPress并不是这样做的。相反,你应该阅读\'ignore_sticky_posts\' => 1 论点如下:

什么时候ignore_sticky_posts 设置为true1, WordPress将ignore the procedure 在自定义查询中设置粘性帖子。

WordPress在ignore_sticky_posts 未设置:以清楚地了解\'ignore_sticky_posts\' => 1 你需要了解WordPress在ignore_sticky_posts 参数未设置或已设置为false0 (默认情况下):

如果查询结果中有帖子是贴子的一部分,WordPress会将它们推到查询结果的顶部。

如果查询结果中没有任何粘性帖子,WordPress将再次从数据库中获取所有这些粘性帖子,并将它们设置到查询结果的顶部。

因此,当参数设置为\'ignore_sticky_posts\' => 1, WordPress简单ignores the above procedure, 仅此而已。它并没有明确排除他们。为此,您需要设置post__not_in 论点

法典示例说明:现在,让我们来看法典中的示例:

$args = array(
    \'posts_per_page\' => 1,
    \'post__in\'  => get_option( \'sticky_posts\' ),
    \'ignore_sticky_posts\' => 1
);
$query = new WP_Query( $args );
此处codex是唯一设置\'ignore_sticky_posts\' => 1 to be efficient, nothing more. 即使没有它,您也会得到相同的预期结果:

$args = array(
    \'posts_per_page\' => 1,
    \'post__in\'  => get_option( \'sticky_posts\' )
);
$query = new WP_Query( $args );
然而,在这种情况下\'ignore_sticky_posts\' => 1 参数未设置,WordPress将不必要地执行所有那些将粘性帖子设置到结果顶部的过程,即使所有这些结果(来自本例)都只是粘性帖子。

学习WordPress的最好方法是检查核心代码。因此,为了更清楚地理解,请检查this part of WordPress CODE.

SO网友:user2026338

在我看来,这是一个更容易的选择,尽管前面提到的一些想法很好。

    $args=array(
        \'post__not_in\'=>get_option(\'sticky_posts\')
        // add in any other arguments you want here
    );
    $posts=new WP_Query($args);

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post