Woocommerce получает товары в заказах до того, как они будут обработаны при оформлении заказа

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

Я пробовал использовать woocommerce_checkout_order_processed, заказ уже обработан и сохранен в базе данных. Мне нужен хук, который предоставит мне только некоторую информацию о заказе, такую ​​как бронирование, элементы и данные заказа, прежде чем он будет сохранен в базе данных. Мне это нужно, потому что, если во время синхронизации возникнут какие-то ошибки, я могу отменить заказ, и он не будет сохранен в базе данных WordPress.

Я попробовал woocommerce_checkout_process хук. Проблема в том, что я не могу получить предметы, используя этот код.

function syncOrderAsEstimates($order_id) {
    $order = wc_get_order($order_id);
    $order->getItems(); // returns empty
}
add_action('woocommerce_checkout_process', 'syncOrderAsEstimates', 10, 1);

person Yves Gonzaga    schedule 17.07.2019    source источник


Ответы (1)


@Yves Попробуйте использовать этот хук действия (/includes/class-wc-checkout.php):

/**
 * Action hook to adjust order before save.
 *
 * @since 3.0.0
 */
do_action( 'woocommerce_checkout_create_order', $order, $data );

Спасибо

person Sushil Adhikari    schedule 17.07.2019
comment
Спасибо, чувак, но он не включал элементы заказа. Я хотел, чтобы элементы тоже могли синхронизироваться. Это только дает мне информацию о доставке и платежной информации. - person Yves Gonzaga; 17.07.2019
comment
вы можете получить товары из корзины: if( ! WC()-›cart-›is_empty() ) { $cart_items = WC()-›cart-›get_cart(); } - person Sushil Adhikari; 17.07.2019
comment
О, извини, чувак, но $order возвращает пустое значение, только $data имеет значение; - person Yves Gonzaga; 17.07.2019
comment
Тоже отредактировал, рад помочь - person Sushil Adhikari; 17.07.2019
comment
Возможно, я просто использовал woocommerce_checkout_order_processed или woocommerce_checkout_process. и если что-то случится с синхронизацией, я просто отменю заказ. Спасибо чувак.. - person Yves Gonzaga; 17.07.2019
comment
пробовали ли вы таким образом, я получаю данные о заказе в их add_action('woocommerce_checkout_create_order', 'has_order',10, 2); функция has_order($order, $data) { var_dump($order); // ваше заявление } - person Sushil Adhikari; 17.07.2019
comment
Да, все значения внутри массива были пустыми - person Yves Gonzaga; 17.07.2019
comment
хм, довольно удивительно .. Я могу получить все детали заказов, возможно, вы что-то пропустили - person Sushil Adhikari; 17.07.2019