我正在尝试自己的自定义搜索,查看元键和帖子标题。
我当前的代码不会将结果限制为指定的类别(由于查询中的OR
)。但是,通过使其成为AND
,然后在元键中搜索将停止工作,除非该单词位于标题中。
有没有办法可以同时搜索标题和元键,还是将其限制在该类别中?
编辑:只是为了澄清, 我想要做的搜索如下:
在这些元字段或帖子标题中搜索搜索字词,但所有结果必须在该类别中。
function search_title_filter( $where, &$wp_query ) {
global $wpdb;
if ( $search_title = $_GET['search-in-main-category'] ) {
$where .= ' OR ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $search_title ) ) . '%\'';
}
return $where;
}
if(isset($_GET['search-in-main-category'])) {
add_filter( 'posts_where', 'search_title_filter', 10, 2 );
$search_key = $_GET['search-in-main-category'];
$query_args = array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'course_overview',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'intended_audience',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'method_of_delivery',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'course_content/agenda',
'value' => $search_key,
'compare' => 'LIKE',
)),
'product_cat' => $current_cat_slug,
'posts_per_page' => 50
);
$search_query = new WP_Query( $query_args );
答案 0 :(得分:0)
你的问题有点不清楚,你提到类别是在wp_query的关系设置中吗?情况并非如此,你的类别密钥存在问题,除非它实际上被称为product_cat,它不正确,但即使它已被折旧(参见下面的tax_query)
我最接近的猜测是你在询问如何在元查询字段中组合关系,如下所示:
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'course_overview',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'intended_audience',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'relation' => 'AND',
array(
'key' => 'method_of_delivery',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'course_content/agenda',
'value' => $search_key,
'compare' => 'LIKE',
)
),
),
正如您所看到的,指定了AND
的新数组和关系。
对于类别,您有两种不同的类型,一种是内置类别分类,您可以使用类别的cat
= id,category_name
即slug名称。你可以看一下这个例子的代码。
自定义分类法适用于您自己的分类法(产品不是内置分类法。您使用tax_query,类似于meta_query
'tax_query' => array(
array(
'taxonomy' => 'product',
'field' => 'slug',
'terms' => 'phpcourse',
),
),
答案 1 :(得分:0)
我通过向自定义SQL添加更多代码解决了这个问题。我可以将变量放入函数的唯一方法是使用全局变量。
global $current_cat;
$current_cat = $current_cat_id;
function search_title_filter( $where, &$wp_query) {
global $wpdb;
global $current_cat;
if ( $search_title = $_GET['search-in-main-category'] ) {
$where .= ' OR ' . $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $search_title ) ) . '%\'
AND '.$wpdb->term_relationships.'.term_taxonomy_id = '.$current_cat;
}
return $where;
}
答案 2 :(得分:0)
您最终的查询将是这样的:
$query_args = array(
'tax_query' => array(
array(
'taxonomy' => 'product',
'field' => 'slug',
'terms' => 'phpcourse',
),
),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'course_overview',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'intended_audience',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'method_of_delivery',
'value' => $search_key,
'compare' => 'LIKE',
),
array(
'key' => 'course_content/agenda',
'value' => $search_key,
'compare' => 'LIKE',
)),
'product_cat' => $current_cat_slug,
'posts_per_page' => 50
);
$search_query = new
WP_Query( $query_args );