Wordpress,也可以在帖子的分类描述中搜索(OR term_taxonomy.description LIKE %A%)

问题描述 投票:1回答:1

我正在努力寻找一种简单的方法,让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是最好的方式吗?

我还有没有其他的方法可以处理搜索到帖子的分类描述中去搜索。

wordpress search categories taxonomy-terms
1个回答
1
投票

经过几个小时的研究,我终于取得了进展,一切都完美地完成了。

下面是它现在的样子。

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,性能如何?

总之,这里是一个完整的解决方案,希望能帮到大家。

© www.soinside.com 2019 - 2024. All rights reserved.