wordpress搜索功能可不可以只搜索字段

2024-12-20 06:23:25
推荐回答(3个)
回答1:

搜索字段可以的。完全匹配原理上也是可以的。我没做完。不过要做也比较复杂。说下思路。

先说字段吧。这个要放弃默认的搜索。要自建一个表单。然后定义一个query 来查询相应的字段。

匹配这个就复杂了点。通过上面的查询后。把结果的文章ID。写到一个数组里。然后再那查这个ID的字段名称。把结果和搜索的字段做对面。如果相等。返回正品。如果不相等。就不是正品

回答2:

http://zhidao.baidu.com/question/871353190867198172.html?oldq=1

我在这篇文章里,有回答过关于自定义字段的查询功能。你可以借鉴。


当然,这只是告诉你程序端查询的方法,如何解决表单搜索,还需要进一步处理。

首先,建一个自已的搜索表单,比如:

       
        

            ' . __('Search for:') . '             
                         
                   
        
  


这个表单是默认的搜索表单,为了实现自定义字段的搜索,需要增加相关标识

比如添加:


到此表单内容完成,然后需要在functions.php中处理搜索过程,需要向posts_search和posts_join和posts_where这3个hooks添加相关内容。

大概代码:


if ( is_search() && isset( $__GET['product_verification'] ) && $__GET['product_verification'] ){
    add_filter( 'posts_search', 'my_search_query' );
    add_filter( 'posts_join', 'my_search_join' );
    add_filter( 'posts_where', 'my_search_where' );
}
function my_search_query( $search ) {
    //这里获取用户输入的查询关键词,不是用来匹配post_title或post_content
    //所以这里由系统产生的搜索语句,就可以不需要了。
    return null;
}
function my_search_join( $join ){
    global $wpdb;
    $join .= " INNER JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id) ";
    return $join;
}
function my_search_where( $where ){
    $value = get_query_var('s');
    $where .= " AND ( ($wpdb->postmeta.meta_key = '这里指定你的自定义字段名' AND $wpdb->postmeta.meta_value = $value ) )";
    return $where;
}


以上代码未经过实地测试,大概方法是我参考官方文档和以前回答的问题写的。

你若测试有问题或测试通过,可回到这里分享一下。

回答3:

在搜索时候默认在搜索词上面多加一个引号。我没试验过,但是目前各大搜索引擎都是这样做的。希望对你哟点滴帮助