我使用WordPress自己的函数设置了重写规则。 重写代码如下所示:
add_rewrite_rule('^testrule/(.+)?$', 'index.php?p=$matches[1]', 'top');
规则适用于所有内容,只是每当我访问该网址时,我都会被重定向,这会导致URL发生变化,我不希望这种情况发生。
任何提示?
答案 0 :(得分:2)
您可能应该使用add_permastruct和add_rewrite_tag功能来帮助我。虽然我的情况有点不同,但这个想法会很相似。
我的自定义帖子类型名为"指南"我需要自定义URL(不同于自定义帖子名称)加上我在URL中使用post slugs,这是我的解决方案:
add_action('init', 'custom_permastruct_rewrite');
function custom_permastruct_rewrite() {
global $wp_rewrite;
$wp_rewrite->add_rewrite_tag("%guide_slug%", '([^/]+)', "post_type=guide&name=");
$wp_rewrite->add_permastruct('my_rule', '/my_custom_name/%guide_slug%', false);
}
所以当你去地址时: http://example.com/my_custom_name/my_post_slug 在上面的URL下,它显示以下内容: http://example.com/?post_type=guide&name=my_post_slug (不重定向到最后一个地址)
您可以调整" post_type = guide& name ="根据您的需要,例如您可以按ID查找帖子 - 所以放在那里" p ="将显示以下内容:http://example.com/my_custom_name/24至http://example.com/?p=24
答案 1 :(得分:1)
某些插件(如自定义永久链接)可以重定向到correct
网址
add_rewrite_rule('^testrule/(.+)?$', 'index.php?disable_redirect=1&p=$matches[1]', 'top');
add_filter('query_vars', 'my_public_query_vars');
function my_public_query_vars($qv)
{
$qv[] = 'disable_redirect';
return $qv;
}
add_filter('wp_redirect', 'my_disable_redirect');
function my_disable_redirect($location)
{
//var_dump(debug_backtrace());//if you want know who call redirect
$disable_redirect = get_query_var('disable_redirect');
if(!empty($disable_redirect)) return false;
return $location;
}