WordPress博客搜索结果按照相关性排序 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

  WordPress默认的搜索结果按照文章的发布时间来排序,这样使我们无法搜索到最对自己口味的文章,其实有个办法可以让搜索结果按照相关性排列,

WordPress博客搜索结果按照相关性排序

  打开主题的 functions.php 文件,插入下面这段代码:

<span style="color: rgb(165, 42, 42); font-weight: normal; font-style. normal; " class="sh_keyword">if</span><span class="sh_symbol">(</span><span style="color: rgb(0, 0, 0); font-weight: bold; font-style. normal; " class="sh_function">is_search</span><span class="sh_symbol">())</span><span class="sh_cbracket">{</span> 
    <span style="color: rgb(0, 0, 0); font-weight: bold; font-style. normal; " class="sh_function">add_filter</span><span class="sh_symbol">(</span><span style="color: rgb(255, 0, 255); font-weight: normal; font-style. normal; " class="sh_string">'posts_orderby_request'</span><span class="sh_symbol">,</span> <span style="color: rgb(255, 0, 255); font-weight: normal; font-style. normal; " class="sh_string">'search_orderby_filter'</span><span class="sh_symbol">);</span> 
<span class="sh_cbracket">}</span> 
<span style="color: rgb(165, 42, 42); font-weight: normal; font-style. normal; " class="sh_keyword">function</span> <span style="color: rgb(0, 0, 0); font-weight: bold; font-style. normal; " class="sh_function">search_orderby_filter</span><span class="sh_symbol">(</span>$orderby <span class="sh_symbol">=</span> <span style="color: rgb(255, 0, 255); font-weight: normal; font-style. normal; " class="sh_string">''</span><span class="sh_symbol">)</span><span class="sh_cbracket">{</span> 
    global $wpdb<span class="sh_symbol">;</span> 
    $keyword <span class="sh_symbol">=</span> $wpdb<span class="sh_symbol">-></span><span style="color: rgb(0, 0, 0); font-weight: bold; font-style. normal; " class="sh_function">prepare</span><span class="sh_symbol">(</span>$_REQUEST<span class="sh_symbol">[</span><span style="color: rgb(255, 0, 255); font-weight: normal; font-style. normal; " class="sh_string">'s'</span><span class="sh_symbol">]);</span> 
    <span style="color: rgb(165, 42, 42); font-weight: normal; font-style. normal; " class="sh_keyword">return</span> <span style="color: rgb(255, 0, 255); font-weight: normal; font-style. normal; " class="sh_string">"((CASE WHEN {$wpdb->posts}.post_title LIKE '%{$keyword}%' THEN 2 ELSE 0 END) + (CASE WHEN {$wpdb->posts}.post_content LIKE '%{$keyword}%' THEN 1 ELSE 0 END)) DESC, {$wpdb->posts}.post_date DESC"</span><span class="sh_symbol">;</span> 
<span class="sh_cbracket">}</span>

  当然,这段代码只是考虑了最简单的情况,当文章标题含有关键字的时候给予权重值 2,内容里含有关键字的时候给予权重值 1,把两个权重值相加以后降序排列,

电脑资料

WordPress博客搜索结果按照相关性排序》(https://www.unjs.com)。然后才用文章发布时间降序作为候补排序方法。

  根据我的测试,采用这种排序方法获得的搜索结果比默认的排序好多了。

最新文章