gpt4 book ai didi

wordpress - $wp_query 何时初始化以及如何覆盖它?

转载 作者:行者123 更新时间:2023-12-04 13:04:22 28 4
gpt4 key购买 nike

我正在尝试使用 WP_Query 编写一个新的查询函数目的。

我创建了一个新的模板文件并输入以下内容:

        $query_args = array(
'post_type' => 'page',
'post_parent=41',
);

// The Featured Posts query.
$results = new WP_Query($query_args);

但是无论我使用什么参数,查询都不会改变。看起来好像查询已经初始化并创建了一个新的 WP_Query对现有查询没有任何影响。

在我的代码之前调用的唯一 wordpress 函数是 get_header()其中不包括对 WP_Query 的任何调用或 query_posts .

我把以下行找出实际的 sql 查询是什么:
echo $GLOBALS['wp_query']->request;

实际的sql查询是:
SELECT wp_posts.* FROM wp_posts WHERE 1=1 AND (wp_posts.ID = '14') AND wp_posts.post_type = 'page' ORDER BY wp_posts.post_date DESC

当我更改 $query_args 时,此查询不会更改.

不知什么时候全局变量 $wp_query已初始化,我应该怎么做才能使用我自己的查询?

最佳答案

您正在创建一个新的 WP_Query对象并将其保存到 $results .那就是您的查询结果所在的位置,而不是在 $GLOBALS['wp_query'] 中.当然它不会覆盖 $wp_query .它们是不同的东西。试试 var_dump($results)反而。

您可以覆盖 $wp_query通过创建一个新的 WP_Query像这样的对象:$wp_query = new WP_Query($query_args); .但这效率不高。当您只需要一个查询时,您可以运行两个查询。更好的方法是钩入 pre_get_posts .就像是:

function alter_query_so_15250127($qry) {
if ( $qry->is_main_query() && is_page('featured-posts-page') ) {
$qry->set('post_type','page');
$qry->set('post_parent',41);
}
}
add_action('pre_get_posts','alter_query_so_15250127');
if有条件很重要。您需要使用该行来确保过滤器仅在您希望它触发的页面上触发。你的问题没有足够的细节让我计算出确切的条件。

关于wordpress - $wp_query 何时初始化以及如何覆盖它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15250127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com