您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

应该避免使用query_posts()吗?

应该避免使用query_posts()吗?

我已经针对WPSE这个主题做了非常详细的解释,出于对SO用户的价值和利益的考虑,这是从WPSE问题中复制的完整文章。出于兴趣的考虑,这里是WPSE完整文章链接有关主查询和自定义查询在此自定义主题中如何工作的一些疑问?

您的实际问题基本上是何时运行自定义查询以及何时使用主查询。让我们分为三个部分

何时运行自定义查询(这不是确定的列表)

创建自定义内容滑块

页面中创建特色内容区域

在page.PHP模板上,如果您需要显示帖子

如果您需要静态首页上的自定义内容

显示相关,热门或信息性帖子

查询范围之外的任何其他辅助或补充内容

何时使用主查询

在上显示主要内容

在您的主页上,并将该页面设置为后端中的博客页面

所有存档页面,包括诸如archive.PHP,category.PHP,author.PHP,taxonomy.PHP,tag.PHP和date.PHP之类的模板

要选择所有具有特色的帖子,我使用以下行来创建一个新的WP_Query对象,该对象定义具有具有特定标签特色的查询

因此,据我了解,这不是WordPres查询,而是由我创建的新查询。据我了解,最好是创建一个查询(如已完成),并且当我要执行此类操作时不使用主查询

正确。这超出了主查询的范围。这是辅助查询或补充内容,无法使用主查询创建。您 使用WP_Queryget_posts创建自定义查询

query_posts来创建自定义查询,甚至任何其他查询。我的重点。

功能并不旨在由插件主题使用。如后面所述,有更好的,性能更高的选项可以更改主查询。query_posts()是通过将页面的主查询替换为新的查询实例来修改页面的主查询的过于简单和有问题的方式。它效率低下(重新运行SQL查询),并且在某些情况下(特别是在处理帖子分页时,通常会完全失败)。

继续

好的,继续,我显示所有没有featured标签的帖子,为此,我使用此代码段,相反,该代码修改了主查询

query_posts( array( 'tag__not_in' => array ( $term->term_id )));

所以我认为这太可怕了。是真的吗

完全错误,您的陈述很遗憾是正确的。如前所述, 使用query_posts。它运行一个完整的新查询,这对性能不利,并且在大多数情况下,它会破坏分页,而分页是要使分页正确工作的主要查询的组成部分。

这是您的主要内容,因此您应该将主查询认循环一起使用,该循环应如下所示,这就是您所需要的

<?PHP
    if (have_posts()) :
        // Start the Loop.
        while (have_posts()) : the_post();
get_template_part('content', get_post_format());

        endwhile;
    else :
        // If no content, include the "No posts found" template.
        get_template_part('content', 'none');

    endif;
?>

您可以完全摆脱这一部分,将其删除,刻录并忘掉它

<?
// get the term using the slug and the tag taxonomy
$term = get_term_by( 'slug', 'featured', 'post_tag' );
// pass the term_id to tag__not_in
query_posts( array( 'tag__not_in' => array ( $term->term_id )));
?>

好的,一旦完成,您将看到来自feature标签的帖子使用主查询认循环显示在您的主页中。

首页删除标签的正确方法是使用pre_get_posts。这是 和应 用于更改主内容循环的挂钩的 。

因此,带有的代码pre_get_posts正确,这是您应该使用的功能。只是一件事,请务必检查您是否不在管理页面上,因为pre_get_posts这也会更改后端。因此,这是在functions.PHP中使用的正确代码,以删除首页标记为特色的 帖子

function exclude_featured_tag( $query ) {
    if ( !is_admin() && $query->is_home() && $query->is_main_query() ) {
        $query->set( 'tag__not_in', 'array(ID OF THE FEATURED TAG)' );
    }
}
add_action( 'pre_get_posts', 'exclude_featured_tag' );

额外的阅读材料将对将来有所帮助

条件标签

什么时候应该使用WP_Query vs query_posts()vs get_posts()?

何时使用WP_query(),query_posts()和pre_get_posts

查询总览

CMS的The Loop指南

其他 2022/1/1 18:14:13 有719人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶