Проверьте с помощью WC () -> session-> has_session () только на переднем конце, но не на Rest-API - PullRequest
0 голосов
/ 26 мая 2019

Поскольку я хочу добавить элементы в корзину woocommerce с помощью моего плагина, мне нужно быть уверенным, что сеансовый cookie-файл установлен, и установить cookie-файл, когда он еще не установлен.

Этот код прекрасно работает для внешнего интерфейса.:

add_action('woocommerce_init', 'force_non_logged_user_wc_session');

function force_non_logged_user_wc_session()
{

if (is_user_logged_in() || is_admin())
    return;

    if (!WC()->session->has_session()) {
    WC()->session->set_customer_session_cookie(true);
    }

}

К сожалению, все мои обратные вызовы REST-API больше не работают для гостей (REST-API вызывается javascript и не требует сеансов WC), но возвращаетследующее сообщение:

Неустранимая ошибка : необученная ошибка: вызов функции-члена has_session () для null в C: \ Users .... \ wp-content \ plugins........ php: 318

Причина проблемы, скорее всего, заключается в том, что WC загружает обработчик сеанса только на страницах переднего плана.Для моего требования этого достаточно, но я не знаю, как установить cookie только для внешнего интерфейса.Я могу только установить cookie в заголовке, но как мне узнать, если это запрос от внешнего интерфейса или API REST?

Я пытался обработать проверку следующими проверками: if(did_action( 'wp_loaded' )) и я попытался добавить действие к другим хукам действий: wp_loaded и init

1 Ответ

0 голосов
/ 07 июня 2019

Я только что решил проблему с помощью следующего исправления: я просто проверяю, существует ли объектная сессия в WC ()

function force_non_logged_user_wc_session()
{
    if (is_user_logged_in() || is_admin())
        return;
    if (isset(WC()->session)) {
        if (!WC()->session->has_session()) {
            WC()->session->set_customer_session_cookie(true);
       }
    }
}

Кажется, это работает без проблем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...