Woocommerce woocommerce_checkout_create_order_line_item, похоже, не стреляет - PullRequest
1 голос
/ 12 февраля 2020

В моем сценарии заказ подписки добавляется в корзину текущего пользователя с дополнительными данными, используемыми для расчета дополнительных данных о подписке, таких как даты следующего обновления, цена подписки и т. Д. Это прекрасно работает благодаря использованию:

$woocommerce->cart->add_to_cart($product->get_id(), '1', '0', array(), array(
    PVS_META_DATA_KEY_INPUTS => $test_data['result']['inputs'],
    PVS_META_DATA_KEY_MONTHS => $test_data['result']['month-data'],
    PVS_META_DATA_KEY_PRODUCTS => $test_data['result']['product-data']
));

. Таким образом, последний шаг для меня - это сбор метаданных о месяце и продукте из пользовательских данных корзины и сохранение их вместе с подпиской для выполнения заказа. причины. Мое исследование показало, что мне, вероятно, нужно использовать действие woocommerce_checkout_create_order_line_item. Вот мой код:

function pvs_woocommerce_checkout_create_order_line_item($item, $cart_item_key, $values, $order)
{
    var_dump($item);
    echo '<br />';
    var_dump($cart_item_key);
    echo '<br />';
    var_dump($values);
    echo '<br />';
    var_dump($order);

    if (isset($values[PVS_META_DATA_KEY_INPUTS]))
    {
        $item->add_meta_data(PVS_META_DATA_KEY_INPUTS, json_encode($values[PVS_META_DATA_KEY_INPUTS]));
    }

    if (isset($values[PVS_META_DATA_KEY_MONTHS]))
    {
        $item->add_meta_data(PVS_META_DATA_KEY_MONTHS, json_encode($values[PVS_META_DATA_KEY_MONTHS]));
    }

    if (isset($values[PVS_META_DATA_KEY_PRODUCTS]))
    {
        $item->add_meta_data(PVS_META_DATA_KEY_PRODUCTS, json_encode($values[PVS_META_DATA_KEY_PRODUCTS]));
    }
}
add_action('woocommerce_checkout_create_order_line_item', 'pvs_woocommerce_checkout_create_order_line_item', 10, 4);

Однако при оформлении заказа я никогда не получаю вывод этого действия. Проверяя страницу состояния WooCommerce, не возвращаются ошибки - поэтому, если она терпит неудачу, она молча терпит неудачу. В качестве проверки работоспособности я также использовал следующую функцию / действие только для того, чтобы увидеть, вызывается ли она, а другая - как неуспешная:

function idk_im_losing_my_mind_tho($item, $cart_item_key, $values, $order)
{
    echo 'Please work ;(';
}
add_action('woocommerce_checkout_create_order_line_item', 'idk_im_losing_my_mind_tho', 10, 4);

Любые слова совета здесь относительно а) получения этого действия для начать стрельбу или б) получить данные корзины, хранящиеся в заказе после оформления заказа?

Мы используем WordPress версии 5.3.2, WooCommerce версии 3.9.1 и WooCommerce Subscription version 3.0.1. Любая помощь с благодарностью!

1 Ответ

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

Видя, что я не могу определить, правильно ли срабатывает действие woocommerce_checkout_create_order_line_item, я решил попробовать другой подход к отладке. Я обнаружил, что WooCommerce предоставляет регистратор, поэтому я создал метод, который позволял бы мне записывать в журналы WooCommerce. Что-то вроде:

function pvs_write_log($message)
{
    $logger = wc_get_logger();
    $logger->debug($message, array('source' => 'PVS Plugin'));
}

Затем из функции pvs_woocommerce_checkout_create_order_line_item я использовал pvs_write_log и var_export вместо echo и var_dump. И вот, у меня был вывод в журналы, который позволил мне отладить и выяснить остальную часть моих проблем. Я подозреваю, не углубляясь в плагин WooCommerce, что это действие должно произойти прямо перед перенаправлением страницы, в результате чего вывод страницы не будет виден.

...