WordPress / PHP:将搜索字符串添加到现有查询字符串

时间:2011-12-26 21:44:49

标签: php forms wordpress search query-string

在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);
}

这似乎不起作用。这个问题比我看起来更复杂吗?还是我走在正确的轨道上?有没有人知道一种简单的编码方式?

非常感谢!

2 个答案:

答案 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" />

我刚验证了这一点,所以我确信它有效!