不带查询字符串变量的搜索结果URL

时间:2016-09-13 作者:Louisa

拥有搜索页面/search/ 我们当前使用的URL格式如下/search/?q=query 用于显示搜索结果。

现在,我们想用如下URL显示搜索结果/search/query/

但出于某种原因,WordPress不喜欢这样。无论何时尝试转到搜索结果URL,我们都会被重定向到“查询”的最佳匹配。

实例/search/barista-coffee/ => 我们被重定向到邮局/barista-coffee-experiences/ 而不是留下来/search/barista-coffee/.

任何人都知道如何解决这个问题,所以我们可以使用搜索结果URL,如/search/query/ 而不是/search/?q=query?

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

最好共享一些已经使用过的代码。

你们提到你们有搜索页面的第一行?你这到底是什么意思?

WordPress有默认的搜索页面你提到过那个吗?如果是,请尝试此代码

function change_search_url_rewrite() {
    if ( is_search() && ! empty( $_GET[\'s\'] ) ) {
        wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( \'s\' ) ) );
        exit();
    }   
}
add_action( \'template_redirect\', \'change_search_url_rewrite\' );
但如果你有一个带有搜索slug的自定义页面,那么你就必须用一种稍微不同的方式来完成。然而,使用内置搜索总是一个好主意。您仍然希望在页面slug之后显示搜索结果,如main。com/page/search-term然后首先您必须制作搜索表单并将表单url与您的特定页面一起传递。喜欢<form role="search" method="get" class="search-form" action="<?php echo home_url( \'/page-slug/\' ); ?>"> 然后使用此代码完成。

add_action( \'template_redirect\', \'change_search_url_rewrite\' );
function change_search_url_rewrite() {
    if (is_search()) {
        $search_url = get_bloginfo(\'url\') .\'/search/\'. urlencode(get_query_var(\'s\')) . ((get_query_var(\'paged\')) ? \'/page/\'. get_query_var(\'paged\') .\'/\' : \'/\');
        if (!empty($_GET[\'s\']) || !empty($_GET[\'paged\']))
            wp_redirect($search_url);
    }
}
希望它有意义!

相关推荐

Get_Search_Form()和aria_Label

如何传递aria\\u label参数以获取\\u search\\u form()?我似乎无法通过“aria\\u label”参数以正确的方式获取\\u search\\u form(),也找不到任何示例。第一个参数为“echo”的批次与文档中的一样,但我在aria\\u label中所做的任何尝试都无法使搜索表单添加aria标签。