страница категории товаров woocommerce, показывающая, что вы не вошли в систему

#php #wordpress #woocommerce

Вопрос:

Я работаю над сайтом wordpress woocommerce. Я хочу,чтобы пользователь логики не мог видеть категорию продукта или подкатегорию или страницу продукта без входа в систему, он будет перенаправлен на страницу входа. Мой код ниже

 add_action( 'template_redirect', 'wc_redirect_non_logged_to_login_access');
function wc_redirect_non_logged_to_login_access() {

    if ( !is_user_logged_in() amp;amp; ( is_woocommerce() || is_shop() || is_cart() || is_checkout() ) ) {
        wp_redirect( get_permalink( get_option('woocommerce_myaccount_page_id')) );
        exit();
    }
}
 

Но после входа в систему при переходе на страницу категории продукта он будет перенаправлен на страницу входа в систему. Я также проверил это с помощью отладки, страница категории продукта показывает, что вы не вошли в систему.Я не могу понять после входа в систему, когда вы переходите на страницу категории товаров, почему вы не вошли в систему?
Пожалуйста, помогите мне с возможными решениями.
Спасибо..

Комментарии:

1. Ваш код должен работать. Я проверил и работает на меня.

2. Он работает в локальном хосте, но не на сервере.

Ответ №1:

Возможно, проблема связана с woocommerce_myaccount_page_id выбором.
Попробуйте получить его через slug (в случае, если страница slug-«моя учетная запись»):

 add_action( 'template_redirect', 'wc_redirect_non_logged_to_login_access');
function wc_redirect_non_logged_to_login_access() {
    if ( !is_user_logged_in() amp;amp; ( is_woocommerce() || is_shop() || is_cart() || is_checkout() ) ) {
        wp_redirect( home_url( '/my-account/' ) );
        exit();
    }
}
 

или через идентификатор страницы «Моя учетная запись»:

 add_action( 'template_redirect', 'wc_redirect_non_logged_to_login_access');
function wc_redirect_non_logged_to_login_access() {
    if ( !is_user_logged_in() amp;amp; ( is_woocommerce() || is_shop() || is_cart() || is_checkout() ) ) {
        $my_account_page_id = 2;
        wp_redirect( get_page_link( $my_account_page_id )  );
        exit();
    }
}
 

Код был протестирован и работает. Добавьте его в свою активную тему functions.php.