我一直在嘗試創建一個自定義搜索查詢,並且我已經取得了一些進展,但又碰到了另一個roadbump。在wp_query中結合了關鍵字搜索和稅務查詢
我正在嘗試將w_query中的meta_query,關鍵字search('s')和tax_query與'OR'關係結合起來。
我已經得到了meta_query和「S」感謝共同努力,這個夢幻般的職位: https://wordpress.stackexchange.com/questions/99849/search-that-will-look-in-custom-field-post-title-and-post-content
然而,tax_query還是給我找麻煩。我嘗試通過相同的方法添加它,但似乎在將它輸出到SQL查詢之前,wordpress會使用tax_query執行其他一些魔術。
這裏就是我有迄今:
function add_join_wpse_news($joins)
{
global $wpdb;
return $joins . " INNER JOIN {$wpdb->postmeta} ON ({$wpdb->posts}.ID = {$wpdb->postmeta}.post_id)" ;
}
function alter_search_wpse_news($search,$qry)
{
global $wpdb;
$add = $wpdb->prepare("({$wpdb->postmeta}.meta_key = '_et_builder_settings' AND CAST({$wpdb->postmeta}.meta_value AS CHAR) LIKE '%%%s%%')",$qry->get('s'));
$pat = '|\(\((.+)\)\)|';
$search = preg_replace($pat,'(($1 OR '.$add.'))',$search);
return $search;
}
function alter_groupby_wpse_news($groupby)
{
global $wpdb;
$mygroupby = "{$wpdb->posts}.ID";
if(preg_match("/$mygroupby/", $groupby)) {
// grouping we need is already there
return $groupby;
}
if(!strlen(trim($groupby))) {
// groupby was empty, use ours
return $mygroupby;
}
// wasn't empty, append ours
return $groupby . ", " . $mygroupby;
}
add_filter('posts_join','add_join_wpse_news');
add_filter('posts_search','alter_search_wpse_news',1,2);
add_filter('posts_groupby', 'alter_groupby_wpse_news');
$args_condensed = array
(
'post_type' => 'news',
'paged' => $paged,
's' => $getname,
);
$the_query = new WP_Query($args_condensed);
$max_pages = $the_query->max_num_pages;
echo $GLOBALS['the_query']->request;
而這個工作。但是,它不包含對標籤或類別的搜索。我試圖通過posts_join和posts_search過濾器手動添加它,但後來我意識到wordpress正在比較輸出的SQL查詢中的tax_query值,這會在嘗試添加時導致問題。
任何幫助都會不勝感激。
編輯:澄清,我想在加:
'tax_query' => array
(
'relation' => 'OR',
array //Search Tag
(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => array($getname)
),
array //Search Category
(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => array($getname),
),
array //Search Category (Single Words)
(
'taxonomy' => 'category',
'field' => 'slug',
'terms' => explode(" ",$getname),
),
array //Search Tag (Single Words)
(
'taxonomy' => 'post_tag',
'field' => 'slug',
'terms' => explode(" ",$getname),
)
),
但作爲反對和關係的WordPress的OR類型的關係增加了默認。
這工作!我不得不改變回報$在哪裏。 'AND'。 「wter.slug like'%$ getname%''」;在哪裏返回$。 ' 要麼 '。 「wter.slug like'%$ getname%''」;但之後,它開始拉動標籤。太棒了。現在我只需要弄清楚如何讓變量$ getname正常工作,並且我將被設置。謝謝!在旁註:你知道爲什麼$ getname需要在這裏設置?我已經從URL中取出了一個GET,但是聲稱這個函數被調用時它是未定義的。 –