이것은이 현재 그것에 매여 기능입니다 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
제품을 검색을 지원하는을 시도 그래서 기본적으로이 기능 중 하나를 표준 검색 (제목 및 내용) 또는 term_taxonomy
테이블의 코드 작품
다른 부분 pa_ordering-code
입니다 Ordering Code
라는 사용자 지정 특성에 대한 속성 검색을 통해 괜찮 으면, s
과 post__not_in
바스를 아무 문제없이 수정할 수 있지만, tax_query
을 사용하려고하면 쿼리가 무너지는 것 같습니다.
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
:
?s=foo&post_type=product&pname=1&pcode=1&without=non&exactly=foo+bar
는 WHERE
절을 덤핑 나는이 참조 :이 때
, 당신에게 아이디어를 제공하려면? 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 매개 변수를 설정