Форма входа и регистрации должна отображаться только как всплывающее окно, поэтому я сделал перенаправление, чтобы избежать страницы 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();
}

Перенаправление только при выходе из системы помогает, но не мешает пользователю увидеть страницу по умолчанию. Они могут выйти из системы, а затем вернуться на предыдущую страницу / myaccount и увидеть эту форму регистрации по умолчанию.

5
libertarian 27 Ноя 2021 в 19:06

1 ответ

Лучший ответ

Есть несколько способов сделать это: вы можете использовать функцию 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 и отлично работает.

3
Ruvee 27 Ноя 2021 в 21:26
2
Да, как я вижу помогло, большое спасибо за помощь!
 – 
libertarian
27 Ноя 2021 в 21:56