我希望利用[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>';
}
}
然后使用条件逻辑重定向到您想要的页面