在wordpress主题中,我设置了一些基于自定义分类的搜索过滤器,这些过滤器将使用以下URL结构查询帖子:
http://myblog.com/?taxonomy1=term1+term2&taxonomy2=term3+term4
除了这些过滤器之外,我还希望集成文本搜索,但不知道如何将搜索查询(例如?s=mysearchhere
)附加到现有的分类法查询中。总的来说,我希望表单在提交时能够指向一个结合了两个字符串的URL:
“http://myblog.com/?taxonomy1=term1+term2&taxonomy2=term3+term4&s=mysearchhere”
到目前为止,我已尝试使用以下功能生成搜索表单:
function remove_querystring_var($url, $key) {
$url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&');
$url = substr($url, 0, -1);
return $url;
}
function apl_search_form($echo = true) {
do_action( 'get_search_form' );
$search_form_template = locate_template('searchform.php');
if ( '' != $search_form_template ) {
require($search_form_template);
return;
}
$url = $_SERVER["REQUEST_URI"];
$action = remove_querystring_var($url,'s');
$form = '<form role="search" method="get" id="searchform" action="' . $action . '" >
<div><label class="screen-reader-text" for="s">' . __('Search for:') . '</label>
<input type="text" value="' . get_search_query() . '" name="s" id="s" />
<input type="submit" id="searchsubmit" value="'. esc_attr__('Search') .'" />
</div>
</form>';
if ( $echo )
echo apply_filters('get_search_form', $form);
else
return apply_filters('get_search_form', $form);
}
这似乎不起作用。这个问题比我看起来更复杂吗?还是我走在正确的轨道上?有没有人知道一种简单的编码方式?
非常感谢!
答案 0 :(得分:2)
您可以使用&
将搜索字词附加到您的网址,例如
&s=mysearchhere
主网址开头后的第一位数据是&#39;?&#39;然后,对于每一个额外的数据,它之后总是附加一个&#39;&amp;&#39;。你永远不需要&#39;&amp;?&#39;在一起。
并使用
检索它$query = $_GET['s'];
也许这会有所帮助。
答案 1 :(得分:1)
我遇到了这个确切的问题并找到了解决方案。
要澄清问题,请说您有搜索表单:
<form method="get" action="http://myblog.com/?taxonomy1=term1">
<input type="text" name="keyword" />
</form>
请注意,键/值 taxonomy1 = term1 是操作网址的一部分。
现在说用户然后搜索“asdf”。这就是我天真地期望的URL:
http://myblog.com/?taxonomy1=term1&keyword=asdf
以下是网址的实际内容:
http://myblog.com/?keyword=asdf
具有键/值“taxonomy1 = term”的URL部分将被删除。
“添加查询字符串”的方法是向表单添加隐藏的输入字段:
<input type="hidden" name="taxonomy1" value="term" />
要为查询字符串添加更多参数,可以添加任意数量的hidden类型的输入,如下所示:
<input type="hidden" name="taxonomy1" value="term" />
<input type="hidden" name="taxonomy2" value="term3" />
我刚验证了这一点,所以我确信它有效!