add_rewrite_rule()
添加的具有自定义query_vars的网址很好用,但是丑陋的url(带有参数)不会重定向到“漂亮的url”。
下面您可以找到我从一篇文章中获得的代码。这只是一个简单的例子。
/**
* Register custom query vars
*
* @param array $vars The array of available query variables
*/
function myplugin_register_query_vars( $vars ) {
$vars[] = 'city';
return $vars;
}
add_filter( 'query_vars', 'myplugin_register_query_vars' );
/**
* Build a custom query
*
* @param $query obj The WP_Query instance (passed by reference)
*
*/
function myplugin_pre_get_posts( $query ) {
// check if the user is requesting an admin page
// or current query is not the main query
if ( is_admin() || ! $query->is_main_query() ){
return;
}
$city = get_query_var( 'city' );
// add meta_query elements
if( !empty( $city ) ){
$query->set( 'meta_key', 'city' );
$query->set( 'meta_value', $city );
$query->set( 'meta_compare', 'LIKE' );
}
}
add_action( 'pre_get_posts', 'myplugin_pre_get_posts', 1 );
/**
* Add rewrite tags and rules
*/
function myplugin_rewrite_tag_rule() {
add_rewrite_tag( '%city%', '([^&]+)' );
add_rewrite_rule( '^city/([^/]*)/?', 'index.php?city=$matches[1]','top' );
}
add_action('init', 'myplugin_rewrite_tag_rule', 10, 0);
因此,当您转到mydomain.com/city/1
时,将看到带有自定义元“城市”且值为1的帖子。
输入mydomain.com/?city=1
我想将第二个地址(丑陋的URL)重定向到友好的URL。就像您观察到尝试打开重定向到mydomain.com/?p=1
mydomain.com/slug-of-post-with-id1
时一样