2016-07-25 3 views
0

Я не разбираюсь в Wordpress, но перед попыткой программно добавить продукт в корзину, я сталкиваюсь с какой-то странной проблемой.Проблема при добавлении продукта в корзину программно

поток, как это:
Заказчик рассматривает продукт
Клиент может добавить дополнительный продукт в их корзину, выбрав параметр флажок
Элемент и дополнительный элемент должен получить добавлен в корзину, если флажок проверено

// product_extra_item_checkbox.php 
add_action('woocommerce_before_add_to_cart_button', 'product_extra_item_checkbox'); 
add_action('woocommerce_add_to_cart', 'add_additional_item_to_cart'); 

function product_extra_item_checkbox() { 
    echo " 
     <input id='_add_additional_item' type='checkbox' class='checkbox add_item' value='1' name='_add_additional_item' /> 
    "; 
} 

function add_additional_item_to_cart() { 
    global $woocommerce; 
    if (isset($_POST['_add_additional_item'])) { 
     $productId = 59; 
     $woocommerce->cart->add_to_cart($productId); 
     echo "<script>alert('ADDED ADDITIONAL PRODUCT TO CART!!!');</script>"; // debug 
    } 
} 

я действительно получил некоторые жалобы от Xdebug говорят стек вызовов был превышен, так что я предполагаю, что это в отношении к этому, но я не могу за жизнь мне понять, почему весь сайт падает, когда Я просто пытаюсь сделать то, что сделали миллионы раньше (я нашел примеры, поскольку Wordpress не моя сильная сторона).

Является ли это ограничением в моей dev-среде, или я делаю что-то действительно не так?

Редактировать: У меня отключена xdebug в моей среде разработки, но сайт выходит из строя.

Я проверил несколько больше и получил еще одно сообщение об ошибке:

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 20480 bytes) in .../wp-includes/taxonomy.php on line 1989

, кажется, относится только к $woocommerce->cart->add_to_cart($productId);.

ответ

0

Решение?

Ну, логические ошибки происходят, и на самом деле это была только моя собственная глупость, которая привела к переполнению стека ;).

Бесконечный цикл, вызванный тем, что система продолжала стрелять woocommerce_add_to_cart действие (что и следовало ожидать) и $_POST['_add_additional_item'] никогда не было очищено.

function add_additional_item_to_cart() { 
    global $woocommerce; 
    if (isset($_POST['_add_additional_item'])) { 
     unset($_POST['_add_additional_item']); // this fixed it 
     $productId = 59; 
     $woocommerce->cart->add_to_cart($productId); 
    } 
} 
Смежные вопросы