WooCommerce怎么从模板重定向钩子中排除MyAccount的子页面(端点)?

本教程将介绍WooCommerce如何从模板重定向钩子中排除MyAccount的子页面(端点)?的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

WooCommerce怎么从模板重定向钩子中排除MyAccount的子页面(端点)? 教程 第1张

问题描述

登录-注册表单必须像弹出窗口一样显示,因此我进行了重定向,以避免未登录用户的默认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/是MyAccount的子端点。他们不必为非登录用户进行重定向。
我试着做得像那样


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();
}

仅在注销时重定向会有所帮助,但并不能避免用户看到默认页面。他们可以注销,然后返回到以前的页面/我的帐户,并查看该默认注册表单。

推荐答案

有多种方法,可以使用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;
  }

}

已在WooCommerce5.7上测试,运行正常。


相关帖子:

用于重定向my-account页上的自定义终结点:

好了关于WooCommerce怎么从模板重定向钩子中排除MyAccount的子页面(端点)?的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。