Woocommerce добавить в корзину незарегистрированный посетитель не работает
Я создал плагин, который требует создания продукта WooCommerce на лету (простой продукт) и добавления в корзину посетителя. Все это происходит на интерфейсной/публичной стороне - т. е. посетитель заполняет форму на странице и отправляет ее. Я использовал такие ресурсы, как этот ответ, чтобы начать работу. Как только продукт успешно создан, я использую:
$product_id = $this->create_product($product);
// Error checking, etc
$result = WC()->cart->add_to_cart($product_id);
Чтобы добавить его в корзину. Это хорошо работает, пока я вхожу в систему (на стороне администратора - внешний интерфейс / общедоступный сторона, вероятно, поймет, что я вошел в систему).
Но когда я не вошел в систему: Кажется, работает только создание продукта, так как я вижу продукт в базе данных, но корзина посетителя пуста. И $result
кажется прекрасным.
$result = 44f683a84163b3523afe57c2e008bc8c
Я изменил настройки WooCommerce, но это ничего не изменило.
Обновление
Для ясности: Я не хочу заставлять посетителя регистрироваться перед добавлением товара в корзину.
Сторона эффект: Я не получаю товары в своей корзине, когда я не вошел в систему, но когда я вхожу в систему и добавляю другой товар, я получаю оба товара в своей корзине.
Как я могу гарантировать, что созданный таким образом продукт будет добавлен в корзину посетителей?
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), то ваш код должен работать нормально.