WP_REDIRECT导致无限循环

时间:2018-08-24 作者:kepler456

Goal: 我修改了permalink,以显示特定类别的类别名称:grill rezepte。默认情况下,永久链接为:https://website.com/post-title 现在只有烧烤餐厅:https://website.com/grill-rezepte/post-title

因此,我想在所有grill Recipes上设置301重定向,以便它们移动到新的URL。我有下面的代码(见下文),它会导致一个无限循环。

Code:

add_action(\'template_redirect\', \'post_redirect_by_custom_filters\');
function post_redirect_by_custom_filters() {
    global $post;
    // this array can contain category names, slugs or even IDs.
    $catArray = [\'grill-rezepte\',\'Test2\'];
    if (is_single($post->ID) && has_category($catArray, $post)) {
        $new_url = "https://bbqpit.de/grill-rezepte/{$post->post_name}/";  
    wp_redirect($new_url, 301);
        exit;
    }
}
我尝试添加if条件

if (strpos($url,\'grill-rezept\') !== false) { 
 Above Code 
}
但这并没有帮助,因为重定向似乎只放置了一次,并且在页面加载时没有删除。所以它导致了一个循环。我有没有办法解决这个问题?据我所知,重定向命令只放置了一次,并永久保留在那里,因此我想不出任何逻辑来解决这个问题。此外,如果URL已经被删除,我显然不想重定向(为了SEO目的,甚至一次也不想重定向)https://website.com/grill-rezepte/post-title

我花了5个小时来想办法,读了很多帖子。我不是wordpress大师,所以我请求帮助。谢谢

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

你大部分都是对的。然而,有一点需要注意:$url 在你的上下文中没有任何意义。通过使用这样的方法进行调试,可以很容易地证明这一点

add_action(\'template_redirect\', \'post_redirect_by_custom_filters\');
function post_redirect_by_custom_filters() {
    var_dump($url);
    wp_die();
}
因此,您的代码只剩下定义$url 作为请求的URL(或至少是路径):

add_action(\'template_redirect\', \'post_redirect_by_custom_filters\');
function post_redirect_by_custom_filters() {
    global $post;

    // this array can contain category names, slugs or even IDs.
    $catArray = [\'grill-rezepte\',\'Test2\'];

    // get current path
    $url = $_SERVER[\'REQUEST_URI\']; 

    // slug is already in URL, return early
    if (strpos($url,\'grill-rezept\') !== false) {
        return;
    }

    if (is_single($post->ID) && has_category($catArray, $post)) {
        $new_url = "https://bbqpit.de/grill-rezepte/{$post->post_name}/";  
        wp_redirect($new_url, 301);
        exit;
    }
}

结束