Как сделать foreach l oop в плагине WordPress? - PullRequest
1 голос
/ 05 февраля 2020

Я пытаюсь создать плагин для woocommerce, который при каждом новом заказе собирает все необходимые мне данные, разбивает их по элементам в foreach l oop, а затем отправляет данные каждого элемента в виде отдельной записи через cURL , Но мой код, похоже, не игнорирует foreach l oop. Вот код для моего l oop:

add_action('woocommerce_new_order', 'wdm_send_order_to_ext'); 
function wdm_send_order_to_ext( $order_id ){

    // get order object and order details
    $order = wc_get_order($order_id);

    print_r(" Start ");
    if($order->get_items()>0)
    {
        print_r(" Item exist ");
        foreach($order->get_items() as $item_id => $item_data){
            print_r(" Foreach loop executing for item ID: $item_id ");
        }
    }
    else
    {
        print_r(" No Item ");
    }
    print_r(" End ");
 }

, и мой результат: Начальный элемент существует Конец редактирования: Когда я использовал print_r в $ order-> get_items (), он печатался как Array ()

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Самый быстрый способ узнать, можете ли вы выполнить foreach l oop, - это удалить все, что не связано с foreach l oop, с помощью:

add_action('woocommerce_new_order', 'wdm_send_order_to_ext'); 
function wdm_send_order_to_ext( $order_id ){

    // get order object and order details
    $order = wc_get_order($order_id);

    $endpoint = "https://enwlq927zckka.x.pipedream.net"; 
    foreach($order->get_items() as $item_id => $item_data){
        echo "Foreach loop executing for item ID: $item_id.";
    }
 }

Если вы видите вывод, то вы знаете, что выполняете foreach l oop. Чтобы отлаживать подобные вещи, вам нужно уметь избавляться от ненужного и строить из того, что вы можете различить по одной части за раз.

Одна вещь, с которой вы можете столкнуться (но она выходит за рамки способ, которым вы сформулировали свой вопрос) заключается в том, что на вызовы cURL может уйти очень много времени. В зависимости от того, как настроен ваш сервер, он может прервать выполнение кода PHP, если он не завершает выполнение sh через X секунд. Поскольку я не знаком с командой $order->get_items() или с тем, сколько записей она может вернуть, я предполагаю, что вы могли бы легко потратить больше минуты, выполняя сотни или более вызовов cURL.

Для например, проверяйте каждый шаг на этом пути.

Кроме того, было бы полезно, если бы вы точно описали, что происходит, а не то, что, кажется, не происходит. Таким образом, ответы могут быть более эффективными. Если вы не уверены, что что-то выполняется, вы всегда можете добавить оператор echo, чтобы проверить, достигнут ли код. Надеюсь это поможет!

0 голосов
/ 10 февраля 2020

Я наконец нашел свою проблему: перехват woocommerce_new_order активируется перед добавлением товаров в заказ, вместо этого я использовал woocommerce_thankyou, и это сработало.

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