使用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-codeterm_taxonomy

代码工作的其他部分好的,我可以修改spost__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_relationshipsterm_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

回到顶部