带有额外查询变量的搜索结果的固定链接

时间:2011-04-22 作者:Simon Blackbourn

我想知道如何使用wp_redirect 以及template_redirect

我从Nice Search 可以很好地进行更改的插件http://example.com?s=africa 进入http://example.com/search/africa:

add_action( \'template_redirect\', \'my_rewrite\' ) );

function my_rewrite() {

        if ( is_search() and false === strpos( $_SERVER[\'REQUEST_URI\'], \'/search/\' ) ) {
            wp_redirect( get_bloginfo( \'home\' ) . \'/search/\' . str_replace( \' \', \'+\', str_replace( \'%20\', \'+\', get_query_var( \'s\' ) ) ) );
            exit();
        }

    }
但我使用的是选择下拉列表Relevanssi 允许访问者将搜索范围缩小到特定帖子类型的插件。这将添加post_type 查询变量,例如。http://example.com?s=africa&post_type=features. 我想这有一个URL类似http://example.com/search/africa/section/features.

Nice搜索代码导致post\\u类型查询变量丢失。因此,我尝试了以下代码:

function my_rewrite() {

    if ( is_search() and false === strpos( $_SERVER[\'REQUEST_URI\'], \'/search/\' ) ) {
        if ( isset( $_GET[\'post_type\'] ) and \'\' !== $_GET[\'post_type\'] ) {
            wp_redirect( get_bloginfo( \'home\' ) . \'/search/\' . str_replace( \' \', \'+\', str_replace( \'%20\', \'+\', get_query_var( \'s\' ) ) ) . \'/section/\' . str_replace( \' \', \'+\', str_replace( \'%20\', \'+\', get_query_var( \'post_type\' ) ) ) );
        } else {
            wp_redirect( get_bloginfo( \'home\' ) . \'/search/\' . str_replace( \' \', \'+\', str_replace( \'%20\', \'+\', get_query_var( \'s\' ) ) ) );
        }
        exit();
    }

}
但WordPress现在认为搜索词是africa/section/features.

有没有办法让搜索词和查询变量都保持在一个好的永久链接中?

ThanksSimon公司

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

要修改搜索重写规则,可以挂接到search_rewrite_rules 滤器您可以自己添加与帖子类型匹配的额外重写规则,也可以更改默认的“搜索重写结构”,使其也包括帖子类型,然后重新生成规则(有四个规则:一个是标准规则,一个是分页规则,两个是提要规则)。因为WP_Rewrite::generate_rewrite_rules() generates rules at every "directory level", 您将获得规则/search/[keyword]/section/[post_type]/, /search/[keyword]/section//search/[keyword]/. 你不需要中间规则,但把它放在里面不会有什么坏处。

add_filter( \'search_rewrite_rules\', \'wpse15418_search_rewrite_rules\' );
function wpse15418_search_rewrite_rules( $search_rewrite_rules )
{
    global $wp_rewrite;
    $wp_rewrite->add_rewrite_tag( \'%post_type%\', \'([^/]+)\', \'post_type=\' );
    $search_structure = $wp_rewrite->get_search_permastruct();
    return $wp_rewrite->generate_rewrite_rules( $search_structure . \'/section/%post_type%\', EP_SEARCH );
}
要检查规则,请使用my Rewrite analyzer plugin.

结束

相关推荐

curl problem or permalinks

我刚刚配置了我的VPS,我使用的是Centos,一切都很好,但如果我将永久链接设置为自定义结构,然后接受主页,没有帖子出现,它会显示404页,我想这是因为我没有启用curl,但我不知道我的php在哪里。我的centos中的ini文件?好的,我的卷曲被启用了,我检查过了phpinfo(); 这里是URLhttp://74.117.158.182/info.php但如果我在我的wordpress中设置了永久链接,那么接受主页,所有都会给我404页,你可以在这个URL上查看http://mbas.co.in如果