使用tax_query在创建一个0 = 1 $ wp_query->请求
这是我在使用pre_get_posts
动作/滤波器
这是目前钩到它的函数修改所述主查询第一尝试:
function advanced_product_search_filter($query) {
if(!is_admin() &&
is_main_query() &&
is_search() && $query->query_vars['post_type'] == 'product')
{
$keyword = $_GET['s'];
if($_GET['exactly'])
$keyword = $_GET['s'] . ' "'. $_GET['exactly'] . '"';
if($_GET['without'])
{
$excluded = exclude_product_keyword_search($_GET['without'],
$_GET['pname'],
$_GET['pcode']
);
$query->set('post__not_in', $excluded);
}
if($_GET['pname'])
$query->set('s', $keyword);
else
$query->set('s', '');
if($_GET['pcode'])
{
$tax_queries = $query->get('tax_query');
$tax_queries[] = array(
array(
'taxonomy' => 'pa_ordering-code',
'field' => 'name',
'terms' => array($keyword),
'operator' => 'LIKE'
)
);
$query->set('tax_query', $tax_queries);
}
}
}
这是一个建立在WooCommerce
安装之上的插件。所以基本上这个功能试图支持搜索一个WooCommerce
产品既可以通过标准的搜索(标题和内容)或自定义属性的属性搜索名为Ordering Code
这是pa_ordering-code
在term_taxonomy
表
代码工作的其他部分好的,我可以修改s
和post__not_in
变量没有任何问题,但如果我尝试使用tax_query
它,查询似乎打破。
为了给你一个想法,当我试试这个:
?s=foo&post_type=product&pname=1&pcode=1&without=non&exactly=foo+bar
倾销WHERE
条款,我看到:
AND wp_posts.ID NOT IN (219) AND 0 = 1
AND
(
(
(wp_posts.post_title LIKE '%foo%') OR
(wp_posts.post_content LIKE '%foo%')
) AND (
(wp_posts.post_title LIKE '%foo bar%') OR
(wp_posts.post_content LIKE '%foo bar%')
)
)
AND wp_posts.post_type = 'product'
AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private')
AND
(
(
wp_postmeta.meta_key = '_visibility' AND
CAST(wp_postmeta.meta_value AS CHAR) IN ('visible','search')
)
)
通知的AND 0 = 1
?当我转储JOIN
子句时,我确信tax_query
参数没有被正确解释,因为我只能在那里看到postmeta
表。没有terms
,term_relationships
或term_taxonomy
表。
而且我也试图仅仅通过这样覆盖现有tax_query
(如果有的话):
$args = array( array(
'taxonomy' => 'pa_ordering-code',
'field' => 'name',
'terms' => array($keyword),
'operator' => 'LIKE'
)
);
$query->set('tax_query', $args);
但我仍然无法得到它的工作。任何想法,我可能做错了什么?
回答:
include_children参数设置为假解决我的问题:
$args = array( array(
'taxonomy' => 'taxonomy-name',
'field' => 'id',
'terms' => array(1, 2, 3, 4),
'include_children' => false,
'operator' => 'AND'
)
);
的错误似乎当有在tax_query嵌套条件发生(例如,2是1个孩子)。
以上是 使用tax_query在创建一个0 = 1 $ wp_query->请求 的全部内容, 来源链接: utcz.com/qa/257424.html