[英]Override Wordpress Admin Panel Search
我正在嘗試將post meta納入wordpress管理面板搜索中。 我進行了一次研究,發現可以使用“ pre_get_posts”過濾器將帖子元設置為查詢。 所以我寫了下面的代碼
function custom_search_query( $query ) {
if( is_admin() && $query->is_search) {
$custom_fields = array(
// put all the meta fields you want to search for here
["key" => "property-ref-code", "compare" => "LIKE"],
["key" => "property-status", "compare" => "="],
["key" => "price", "compare" => "="],
["key" => "rent-price", "compare" => "="],
["key" => "bedrooms", "compare" => "="],
);
$meta_query = $query->get('meta_query');
if (empty($meta_query))
{
$meta_query = array();
}
$meta_query[] = array('relation' => 'OR');
foreach($custom_fields as $cf) {
$meta_query[] = array(
'key' => $cf["key"],
'value' => $query->query_vars['s'],
'compare' => $cf["compare"],
);
}
$query->set("meta_query", $meta_query);
}
}
add_filter( "pre_get_posts", "custom_search_query");
該代碼現在不僅不返回任何內容,而且還破壞了wordpress搜索。 我的意思是。 如果禁用此代碼,則可以按帖子標題搜索,如果存在,它將返回一些結果。 然后,如果啟用代碼並按帖子標題搜索將不返回任何內容。 基本上,我想按價格,參考代碼等搜索屬性,這些屬性是我所做的postmeta字段。 當我搜索要搜索的屬性和給定的meta_keys時,誰能幫助我擴展wordpress搜索
謝謝
問題可能是if (empty($meta_query_args))
始終返回true,因為未定義$meta_query_args
。 因此,將刪除搜索中的實際meta_queries。
function extend_admin_search( $query ) {
// Extend search for document post type
$post_type = 'document';
// Custom fields to search for
$custom_fields = array(
"_file_name",
);
if( ! is_admin() )
return;
if ( $query->query['post_type'] != $post_type )
return;
$search_term = $query->query_vars['s'];
// Set to empty, otherwise it won't find anything
$query->query_vars['s'] = '';
if ( $search_term != '' ) {
$meta_query = array( 'relation' => 'OR' );
foreach( $custom_fields as $custom_field ) {
array_push( $meta_query, array(
'key' => $custom_field,
'value' => $search_term,
'compare' => 'LIKE'
));
}
$query->set( 'meta_query', $meta_query );
};
}
add_action( 'pre_get_posts', 'extend_admin_search' );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.