我想创建一个搜索,它可以:
在我的自定义分类中搜索-自定义标记搜索帖子标题搜索选择元字段??不知道使用自定义帖子类型搜索-简单部分我查看了wordpress API,但找不到任何有用的内置函数,我在下面创建了一个自定义查询:这里有一个bug,因为它有时会返回重复的结果,这里可能需要左连接。
这个查询只在当前搜索术语和标题,但我还希望搜索一个名为cterm的元字段。
SELECT wp_posts.*
FROM wp_posts, wp_term_relationships, wp_term_taxonomy, wp_terms
WHERE (wp_terms.name LIKE \'%car%\'
OR wp_posts.post_title LIKE \'%car%\')
AND wp_posts.post_status = \'publish\'
AND wp_posts.post_type = \'posts_vch\'
AND wp_posts.ID = wp_term_relationships.object_id
AND wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id
AND wp_term_taxonomy.term_id = wp_terms.term_id GROUP BY wp_posts.ID LIMIT 1 ,50
更新时间:
在上面更新的查询中,使用管理删除重复结果group by
但另一个缺陷是,它不会带来带有“汽车”一词的帖子。基本上,它只显示标题中有“汽车”一词的帖子,而不显示术语/标签。
SO网友:Alvin
试试这个,它可能会有帮助:
if( !defined( \'ABSPATH\' ) )
exit;
function modify_wp_search_where( $where ) {
if( is_search() ) {
global $wpdb, $wp;
$where = preg_replace(
"/($wpdb->posts.post_title (LIKE \'%{$wp->query_vars[\'s\']}%\'))/i",
"$0 OR ( $wpdb->postmeta.meta_value LIKE \'%{$wp->query_vars[\'s\']}%\' )",
$where
);
add_filter( \'posts_join_request\', \'modify_wp_search_join\' );
add_filter( \'posts_distinct_request\', \'modify_wp_search_distinct\' );
}
return $where;
}
add_action( \'posts_where_request\', \'modify_wp_search_where\' );
function modify_wp_search_join( $join ) {
global $wpdb;
return $join .= " LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) ";
}
function modify_wp_search_distinct( $distinct ) {
return \'DISTINCT\';
}