我想知道如何使用wp_redirect
和template_redirect
钩子将搜索URL重写为一个漂亮的永久链接,其中还包含一个额外的查询变量。
我已经从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
。我希望它有一个类似的网址http://example.com/search/africa/section/features
。
尼斯搜索代码会导致post_type查询变量丢失。所以我尝试了以下代码:
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
。
有什么办法可以使搜索字词和查询var都保持良好的永久链接?
谢谢西蒙