Search options/filters

时间:2011-03-22 作者:sta777

我正在尝试向侧栏搜索框添加一些复选框选项,similar to this, 用户可以选择是否搜索All Words, Some Word, 或者Entire phrase.

我确实在搜索后找到了这个-Wordpress Search Phrases. “句子”选项似乎很有效,但其他选项则不太好。

下面的代码是我目前正在处理的,但如果能得到一些帮助使其正常工作,我将不胜感激。非常感谢S(我不想为此使用插件)。

<form action="<?php bloginfo(\'home\'); ?>/" method="post">
<div class="search-icon">       
     <label for="search" accesskey="4" class="hidden">Search the site</label>                  
     <input type="text" name="s" id="search" value="Enter search term" onblur="this.value = this.value || this.defaultValue;" onfocus="this.value = \'\';" />             
     <input type="submit" name="submit" value="GO" class="s-btn" />
     <p><a href="#" id="search-anchor">Search Options</a></p>
     <div class="option-slide">
     <input type="radio" name="sentence" value="" checked="checked" /><label>All Words</label><br />
     <input type="radio" name="sentence" value="or" /><label>Some Word</label><br />
     <input type="radio" name="sentence" value="and" /><label>Entire phrase</label>    
     </div>   
 </div></form>    
EDIT: The answer below doesn\'t actually work after all : ( Anybody else have any ideas please?

1 个回复
最合适的回答,由SO网友:John P Bloch 整理而成

第一件事:您的“所有单词”复选框的name属性不应该是“s”。这会将搜索文本替换为“1”,因此选中后,您将搜索“1”,而不是搜索文本。

如果你想复制你在问题中给出的例子,我认为你不想使用“精确”。

下面是一个示例:

Search for "Two Things" in titles and content:

Matches                   Does not match

"Two"                     "Two Things More"
"Things"                  "One or Two Things"
"Two Things"              "Two Things."
我可以滔滔不绝地谈论它不匹配的地方,但你明白了。这可能就是为什么你会得到意想不到的结果。

无论如何,请尝试将“所有单词”复选框的名称更改为无法匹配的名称,例如\'fake_search_flag_name\', 因为该标志只是描述WordPress的正常默认搜索功能。

编辑

好的,既然它们是收音机,下面是您可以做的事情:

第一个是WordPress的默认行为,因此需要将该值设为空:

<input type="radio" name="sentence" value="" checked="checked" /> All Words
如果选中该框,由于该值为空,WordPress将忽略它并使用其默认功能。下一部分有些棘手。更改其他两个收音机的值,如下所示:

<input type="radio" name="sentence" value="or" /> Some Word<br />
<input type="radio" name="sentence" value="and" /> Entire phrase
就其本身而言,这将使它们的行为方式相同:即您希望“整个短语”发挥作用的方式。所以我们需要让“一些词”起作用。我还没有测试下一部分,但它应该可以工作。

我们需要过滤搜索查询,以允许搜索词与包含部分词但不是全部词的帖子匹配:

add_filter( \'posts_search\', \'my_awesome_posts_search_filter\' );

function my_awesome_posts_search_filter( $sql, $wpq ){
  if( !isset( $wpq->query_vars[\'sentence\'] ) || \'or\' != $wpq->query_vars[\'sentence\'] )
    return $sql;
  $new_search = str_replace( \') AND (\', \') OR (\', $sql );
  return $new_search;
}
应该这样做。

结束

相关推荐

Search result permalink

如何使permalink可用于搜索结果页/?s=一+二+确定到/搜索/一-二确定/感谢