Woocommerce добавить в корзину незарегистрированный посетитель не работает


Я создал плагин, который требует создания продукта WooCommerce на лету (простой продукт) и добавления в корзину посетителя. Все это происходит на интерфейсной/публичной стороне - т. е. посетитель заполняет форму на странице и отправляет ее. Я использовал такие ресурсы, как этот ответ, чтобы начать работу. Как только продукт успешно создан, я использую:

$product_id = $this->create_product($product);
// Error checking, etc
$result = WC()->cart->add_to_cart($product_id);

Чтобы добавить его в корзину. Это хорошо работает, пока я вхожу в систему (на стороне администратора - внешний интерфейс / общедоступный сторона, вероятно, поймет, что я вошел в систему).

Но когда я не вошел в систему: Кажется, работает только создание продукта, так как я вижу продукт в базе данных, но корзина посетителя пуста. И $result кажется прекрасным.

$result = 44f683a84163b3523afe57c2e008bc8c

Я изменил настройки WooCommerce, но это ничего не изменило. enter image description here

Обновление

Для ясности: Я не хочу заставлять посетителя регистрироваться перед добавлением товара в корзину.

Сторона эффект: Я не получаю товары в своей корзине, когда я не вошел в систему, но когда я вхожу в систему и добавляю другой товар, я получаю оба товара в своей корзине.

Как я могу гарантировать, что созданный таким образом продукт будет добавлен в корзину посетителей?

Author: TungstenX, 2018-11-28

1 answers

Я провел два теста на своем сайте разработчиков

add_action( "wp_loaded", function() {
    var_dump(WC()->cart->add_to_cart(1353));
});

И

add_action( "wp_footer", function() {
    var_dump(WC()->cart->add_to_cart(1353));
});

Оба var_dump хэша, но только первый фактически добавляет товар в корзину, второй печатает хэш, но ничего не добавляет.

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

Если вы убедитесь, что используете метод add_to_cart(), прежде чем содержимое будет отправлено в браузер (например, запустите его в действие wp_loaded), то ваш код должен работать нормально.

 2
Author: Greg Winiarski, 2018-12-06 08:52:24