如果从特定页面登录,则登录重定向

时间:2017-10-04 作者:C Porter

我在我的主题函数中使用了一个非常标准的登录重定向脚本,但是我了解到它导致了我的网站的一个完整插件出现错误。简而言之,在插件的前端系统中,用户可以在lightbox模式中注册帐户。启用“常规重定向”后,模式无法完成注册。

所以,我要做的是在所有页面上运行我的登录重定向,除了一个我可以通过slug识别的页面。这个页面是由插件自动生成的,所以我没有ID或任何东西。

这是我现有的登录重定向。这很简单。

add_action(\'wp_login\',\'auto_redirect_after_login\');
function auto_redirect_after_login(){
    wp_redirect(home_url());
    exit();
}
我的障碍是,这种用户注册可能发生在无限多的页面上,但它们都是插件的“子”页面。这意味着它们都有相同的url结构。

我不需要重定向工作的所有页面都将是。com/课程/*

有什么想法吗?

**********更新**********

这就是我现在所在的地方,但它不起作用。

add_action(\'wp_footer\', \'detect_page_for_redirect\');
function detect_page_for_redirect(){
    if( !is_singular(\'course\')) {
        add_action(\'wp_login\',\'auto_redirect_after_login\');
    }
}

function auto_redirect_after_login(){
    wp_redirect(home_url());
    exit();
}

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

您可以尝试以下操作来添加自定义表单字段:

add_action(\'login_form\', \'custom_login_field\');
function custom_login_field() {
    if (!is_singular(\'course\')) {
        echo "<input type=\'hidden\' name=\'context\' value=\'notcourse\'>";
    }
}
如果设置了该选项,则会选择该选项,并在登录时进行重定向:

add_action(\'wp_login\', \'auto_redirect_after_login\');    
function auto_redirect_after_login() {
    if ( (isset($_POST[\'context\'])) && ($_POST[\'context\'] == \'notcourse\') ) {
         wp_redirect(home_url()); exit();
    }
}
因此,从非课程页面提交的任何登录表单都将在登录后重定向到主页,因为这似乎是您想要的。

使现代化

相反,切换逻辑可能会起作用:

add_action(\'login_form\', \'custom_login_field\');
function custom_login_field() {
    if (is_singular(\'course\')) {
        echo "<input type=\'hidden\' name=\'context\' value=\'course\'>";
    }
}

add_action(\'wp_login\', \'auto_redirect_after_login\');    
function auto_redirect_after_login() {
    if ( (isset($_POST[\'context\'])) && ($_POST[\'context\'] == \'course\') ) {
         return;
    }
    wp_redirect(home_url()); exit();
}

结束

相关推荐

Redirect WP 404 to html

需要将php 404重定向到纯html以减少服务器负载。是否有任何更新?How do I skip wordpress's 404 handling and redirect all 404 errors for static files to 404.html?#adding your own handler ErrorDocument 404 /404/index.html <IfModule mod_rewrite.c> RewriteRule