Woocommerce 如何从模板重定向挂钩中排除 myaccount 的子页面(端点)?
Woocommerce how to exclude the child pages (endpoints) of myaccount from the template redirect hook?
登录注册表单必须仅像弹出窗口一样显示,因此我进行了重定向,以避免未登录用户使用默认的 myaccount 页面。
add_action( 'template_redirect', 'wish_custom_redirect' );
function wish_custom_redirect() {
global $wp;
if (!is_user_logged_in() && is_page('my-account') ) {
wp_redirect( '/' );
exit;
}
}
要查看他们的帐户页面,用户必须以弹出形式登录或注册。
但是有一个问题 - /my-account/lost-password/、my-account/reset-password/ 是我的帐户的子端点。他们不必为未登录的用户进行重定向。
我试着那样做
add_action( 'template_redirect', 'wish_custom_redirect' );
function wish_custom_redirect() {
global $wp;
if (!is_user_logged_in() && is_page('my-account') && !is_page('my-account/lost-password/') ) {
wp_redirect( '/' );
exit;
}
}
但它仍然重定向。也许这是一个糟糕的解决方案并且有更好的方法?或者如何使这个重定向正确?
add_action('wp_logout','auto_redirect_after_logout');
function auto_redirect_after_logout(){
wp_redirect( home_url() );
exit();
}
仅在注销时重定向有帮助,但不能避免用户看到默认页面。他们可以注销,然后在前面的页面 /myaccount 上 return,然后看到默认的注册表单。
有多种方法可以做到这一点,您可以使用 is_wc_endpoint_url
函数,或者您可以使用 global $wp
及其 属性 也称为 request
。
既然你已经试过了global $wp
,那我就照样做。
你的代码应该是这样的:
add_action( 'template_redirect', 'wish_custom_redirect' );
function wish_custom_redirect() {
global $wp;
if (
!is_user_logged_in()
&&
('my-account' == $wp->request)
&&
('lost-password' != $wp->request)
)
{
wp_safe_redirect( site_url() );
exit;
}
}
它已经在 woocommerce 5.7
上测试过并且工作正常。
相关Post:
用于在 my-account
页面上重定向自定义端点:
登录注册表单必须仅像弹出窗口一样显示,因此我进行了重定向,以避免未登录用户使用默认的 myaccount 页面。
add_action( 'template_redirect', 'wish_custom_redirect' );
function wish_custom_redirect() {
global $wp;
if (!is_user_logged_in() && is_page('my-account') ) {
wp_redirect( '/' );
exit;
}
}
要查看他们的帐户页面,用户必须以弹出形式登录或注册。 但是有一个问题 - /my-account/lost-password/、my-account/reset-password/ 是我的帐户的子端点。他们不必为未登录的用户进行重定向。 我试着那样做
add_action( 'template_redirect', 'wish_custom_redirect' );
function wish_custom_redirect() {
global $wp;
if (!is_user_logged_in() && is_page('my-account') && !is_page('my-account/lost-password/') ) {
wp_redirect( '/' );
exit;
}
}
但它仍然重定向。也许这是一个糟糕的解决方案并且有更好的方法?或者如何使这个重定向正确?
add_action('wp_logout','auto_redirect_after_logout');
function auto_redirect_after_logout(){
wp_redirect( home_url() );
exit();
}
仅在注销时重定向有帮助,但不能避免用户看到默认页面。他们可以注销,然后在前面的页面 /myaccount 上 return,然后看到默认的注册表单。
有多种方法可以做到这一点,您可以使用 is_wc_endpoint_url
函数,或者您可以使用 global $wp
及其 属性 也称为 request
。
既然你已经试过了global $wp
,那我就照样做。
你的代码应该是这样的:
add_action( 'template_redirect', 'wish_custom_redirect' );
function wish_custom_redirect() {
global $wp;
if (
!is_user_logged_in()
&&
('my-account' == $wp->request)
&&
('lost-password' != $wp->request)
)
{
wp_safe_redirect( site_url() );
exit;
}
}
它已经在 woocommerce 5.7
上测试过并且工作正常。
相关Post: