我正在努力寻找一种简单的方法,让wordpress搜索也能在帖子的分类描述中进行搜索,我找到了一些主题,但没有真正的答案。
问题是,用户可能会输入他们搜索的内容+类别名称(例如,"马里奥任天堂64",其中 "任天堂64 "是类别名称。目前来看,它不会返回任何结果,这感觉不对)。)
我需要在term_taxonomy.description中进行搜索,因为类别有别名,我在这个字段中输入别名(例如:"Nintendo 64,N64等...")。
这是我得出的结果。
function custom_posts_join ($a) {
global $wpdb;
return $a . " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_id) ";
}
function custom_posts_where ($a) {
global $wpdb;
return $a . " AND $wpdb->term_taxonomy.taxonomy = 'category'";
}
add_filter('posts_join', custom_posts_join );
add_filter('posts_where', custom_posts_where );
不过,我还是需要能够整合 OR (term_taxonomy.description LIKE '%A%')
在现在的searchas中,sql请求只搜索了
(posts.post_title LIKE '%A%')
OR (posts.post_excerpt LIKE '%A%')
OR (posts.post_content LIKE '%A%')
另外,是否可以添加DISTINCT,这样就不会多次返回同一个帖子,基于帖子可以属于多个类别的事实。
我真的不知道我的路子是否正确,但我卡住了!另外我也在想,看似一个小小的调整,这在服务器上的工作量会有多大呢?"我已经好几年没有开发了,现在又回到了这里,我不知道这样做会不会让搜索变得太重。INNER JOIN是最好的方式吗?
我还有没有其他的方法可以处理搜索到帖子的分类描述中去搜索。
经过几个小时的研究,我终于取得了进展,一切都完美地完成了。
下面是它现在的样子。
function custom_posts_join ( $join ) {
global $wpdb;
if ( is_search() ) {
$join .= " INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_id) ";
}
return $join;
}
function custom_posts_where ( $where ) {
global $wpdb;
if ( is_search() ) {
$where = preg_replace(
"/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->term_taxonomy.".description LIKE $1)", $a );
$where .= " AND $wpdb->term_taxonomy.taxonomy='category'";
}
return $where;
}
add_filter('posts_join', custom_posts_join );
add_filter('posts_where', custom_posts_where );
再加上DISTINCT:
function custom_posts_distinct ( $distinct ) {
global $wpdb;
if ( is_search() ) {
return "DISTINCT";
}
return $distinct;
}
add_filter( 'posts_distinct', 'custom_posts_distinct' );
不过,每次研究都要做2个INNER JOIN,性能如何?
总之,这里是一个完整的解决方案,希望能帮到大家。