wordpress get_search_query() in functions.php is empty



在函数中使用get_search_query()进行wp_query时.php我无法获得搜索词。

function load_posts() {
$ppp = (isset($_POST["ppp"])) ? $_POST["ppp"] : 20;
$page = (isset($_POST['page'])) ? $_POST['page'] : 1;

$args = array(
'suppress_filters' => true,
'post_type' => 'post',
'ignore_sticky_posts'   => true,
'post_status' => array('publish'),
'orderby'           => 'post_date',
'order'             => 'DESC',
'posts_per_page' => $ppp,
'paged'             => $page,
's' => get_search_query(), //i need access to search term here
);
$loop = new WP_Query($args);
echo '<pre>' . var_export($args, true) . '</pre>';
}
add_action('wp_ajax_nopriv_load_posts','load_posts');
add_action('wp_ajax_load_posts','load_posts');

这将在函数中返回.php: 正如您在's' => '',下看到的,搜索为空。

array (
'suppress_filters' => true,
'post_type' => 'post',
'ignore_sticky_posts' => true,
'post_status' => 
array (
0 => 'publish',
),
'orderby' => 'post_date',
'order' => 'DESC',
'posts_per_page' => '20',
'paged' => '1',
's' => '',
)

在搜索中运行完全相同的代码.php它具有搜索值。(唯一的区别是posts_per_page但这并不重要)

array (
'suppress_filters' => true,
'ignore_sticky_posts' => true,
'post_type' => 'post',
'post_status' => 
array (
0 => 'publish',
),
'orderby' => 'post_date',
'order' => 'DESC',
'posts_per_page' => 4,
'paged' => 1,
's' => 'Hydro',
)

为了在函数中执行代码.php我执行一个 ajax 请求来调用load_posts函数 (这工作正常)

jQuery.post(ajaxUrl, {
action: "load_posts",
page: page,
ppp: ppp
})

如果需要,我很乐意提供更多信息,但我不明白为什么搜索值在函数中不可用.php

任何帮助表示赞赏!

编辑:我发现这个线程说在函数中调用is_search()函数是早期的.php因为它在搜索之前加载。我想这对 get_search_query() 来说是同样的问题。但仍需要访问函数中的搜索词.php并且不确定如何获取该值。

https://stackoverflow.com/a/53608188/11524115

应该使用parse_query操作,因为WordPress此时将为您设置大多数内容。

parse_query 是在 WP_Query->parse_query() 设置查询变量(例如用于条件标记的各种is_变量)后触发的操作。

您可能还需要仔细检查您是否也在主查询上,此代码就是这样做的。

add_action(
'parse_query',
function() {
if(is_main_query() && is_search()){
var_dump(get_search_query());
}
}
);

编辑

通过您更新的帖子显示您如何使用它,上述内容将不起作用。

函数get_search_query最终是对get_query_var的调用,它只是一个访问全局$wp_query对象的全局函数。但是,您没有使用全局$wp_query对象,而是通过调用new WP_Query()来创建自己的对象。我认为对您来说最简单的事情就是使用$_GET['s']获取查询参数。(我假设s,但如果您使用其他东西,显然会改变它。

最新更新