唯一的重定向登录和注册在woocommerce


unique redirect both login and register in woocommerce

我希望利用[woocommerce_my_account]短代码在一个独特的页面上创建登录和注册表单。

我想让这个表单的两个部分重定向到一个不同的url。它不应该是全局的,只能是这个唯一页面上的表单。

在functions.php中我添加了

function free_redirect( $redirect ){
if (strpos($_SERVER['REQUEST_URI'], "/unique-page/") !== false){
    $redirect = '/new_url/';
    return $redirect;
  }
}
add_filter('woocommerce_login_redirect', 'free_redirect');
function redirect_register( $redirect ){
if (strpos($_SERVER['REQUEST_URI'], "/unique-page/") !== false){
    $redirect = '/new_url/';
    return $redirect;
  }
}
add_filter('woocommerce_registration_redirect', 'redirect_register');

我遇到的两个问题是:

1) Register仍然没有重定向,只是按正常行为转到my-account页面

2)它影响了其他登录表单,当他们提交他们的重定向不产生任何html内容在下一页(日志没有告诉我任何关于这一点,但我怀疑这是因为过滤器导致一些问题,由于我没有正确结束功能)。

注:我读过关于添加一个隐藏的输入字段来附加一个查询字符串,然后使用它而不是request_uri,但我想保持这个简单和干净。

请让我知道我错过了什么,或者是否有更好的选择。

对于登录重定向,这段代码将完成您的工作。

function my_login_redirect( $redirect ) {
    if ( $_SERVER['REQUEST_URI'] == '/unique-page/' ){
        $redirect = '/new_url/';
        return $redirect;
    }
    return $redirect;
}
add_filter('woocommerce_login_redirect', 'my_login_redirect');

它实际上检查$_SERVER['REQUEST_URI']到您的/unique-page/。如果匹配,则执行代码,否则将重定向到默认的$redirect

注册重定向也是如此-

function redirect_register( $redirect ){
    if ( $_SERVER['REQUEST_URI'] == '/unique-page/' ){
        $redirect = '/new_url/';
        return $redirect;
    }
    return $redirect;
}
add_filter('woocommerce_registration_redirect', 'redirect_register');

第三个问题-

注:我读过关于添加隐藏输入字段来附加查询的内容字符串,然后使用,而不是request_uri,但我想保持简单和干净。

是的,有一个方法。你可以使用-

add_action( 'woocommerce_login_form', 'add_redirect_field' );
function add_redirect_field() {
    if ( $_SERVER['REQUEST_URI'] == '/unique-page/' ){
        echo '<p><input type="hidden" name="redirect-token" value="your-custom-token-for-redirect" /></p>';     
    }
}

然后使用条件逻辑重定向到您想要的页面