强制搜索表单转到干净的URL,而不进行多个重定向

时间:2017-11-14 作者:kater louis

我已经重写了search_basesuche (德语)要获取如下url:http://mypage.com/suche/searchterm

现在,当我提交搜索表单时,我会访问url/?s=searchterm.

internetz从多个来源为我提供了相同的解决方法,例如:Search results URL without query string variables

add_action("template_redirect", function() {
    if (is_search() && !empty( $_GET["s"] ) ) {
        if (wp_redirect( home_url(\'/suche/\') . urlencode(get_query_var(\'s\')) )) {
            exit();
        }
    }
});
我对该解决方案的问题:

重定向会导致明显更长的延迟(即使在我的本地环境中)

  • 我必须硬编码suche 同样,虽然我想使用修改后的搜索库,但我尝试使用创建自己的自定义搜索表单add_filter("get_search_form", ... 具有action="http://mypage.com/suche/ 这仍然导致get var/suche/?s=searchterm 这显然不起作用。

    如何让搜索表单直接转到/suche/searchterm

    谢谢

  • 1 个回复
    最合适的回答,由SO网友:janh 整理而成

    假设您使表单的操作指向正确的URL,下面有两个(半)选项:

    使用Javascript(jQuery)

    jQuery(document).ready( function() {
        jQuery("#searchform").submit( function() {
            self.location.href = jQuery(this).attr("action") + jQuery("#s").val();
            return false;
        });
    });
    
    您也可以不使用jQuery(如果您不在站点上使用jQuery,也不想为此加载它)。这里有一个简单的版本(可能不是超级跨浏览器,但我还没有测试过),您可以在此基础上进行扩展:

    <form action="/suche/" onsubmit="self.location.href=this.getAttribute(\'action\') + document.getElementById(\'s\').value; return false;">
    <input type="text" name="s" id="s" />
    <input type="submit"></form>
    
    使用重写规则:

    RewriteEngine On
    RewriteBase /
    RewriteCond %{QUERY_STRING} ^s=(.*)
    RewriteRule ^(.*?)/?$ $1/%1? [R=302,L]
    
    这将适用于任何URL,得到?s=。。。如果已通过,您可能希望将其限制为实际搜索,如

    RewriteEngine On
    RewriteCond %{QUERY_STRING} ^s=(.*)
    RewriteRule ^suche/$ /suche/%1? [R=302,L]
    
    如果以这种形式传递多个参数(例如,要搜索的类别和字符串),则必须相应地进行调整,现在它只假设只有一个参数,这就是查询字符串。

    结束

    相关推荐

    how to search everything

    我们有一个使用BuddyPress、bbPress等的Wordpress内部网。。从…起this article, 我调整了主题searchform.php 包括:<input type=\"hidden\" name=\"post_type[]\" value=\"docs\" /> <input type=\"hidden\" name=\"post_type[]\" value=\"events\" /> <input type=\"hidden\" n