Я пытаюсь создать пользовательские метаданные в таблице wp_woocommerce_order_itemmeta. Но для создания данных, которые я хочу сохранить в качестве метаданных, мне нужно знать product_id элемента заказа, который создается на хуке Woocommerce woocommerce_checkout_create_order_line_item.
Мне удалось создать мета-запись со значением из переменной сеанса, но мой код завершается ошибкой, когда я пытаюсь получить product_id элемента заказа. Я был бы очень признателен за решение этой проблемы.
Таким образом, следующий код работает путем создания записи в таблице wp_woocommerce_order_itemmeta с мета-ключом "_raw_location_id"
add_action('woocommerce_checkout_create_order_line_item', 'raw_order_item_meta', 20, 2);
function raw_order_item_meta( $order ) {
$order->update_meta_data( '_raw_location_id', $_SESSION['location_id'] );
}
Итак, я «усовершенствовал» код для создания еще одной записи, но со значением meta_key $ product_id. При добавлении кода, который я считал необходимым, оформление заказа не завершается, поэтому я никогда не попадаю на страницу благодарности. Страница оформления заказа отображается повторно без изменений в базе данных. Я провел тщательное тестирование, добавив по одной строке кода за раз. У меня есть номер строки кода ниже для удобства.
Я обнаружил, что добавление строки "3" вызывает ошибку. Поэтому я не смог проверить, работают ли строки 4 и 5 или нет, и я взял код из другого поста, поэтому я даже не могу сказать, что понимаю синтаксис строки 5, я просто надеюсь, что он работает так, как было объявлено. Я думаю, что мое первое препятствие - линия 3. Почему это не работает? Я просто хочу знать, что product_id относится к обрабатываемой позиции заказа.
- add_action ('woocommerce_checkout_create_order_line_item', 'raw_order_item_meta', 20, 2);
функция raw_order_item_meta ($ order) {
$ items = $ order-> get_items ();
- foreach ($ items как $ item_id => $ item) {
$ product_id = $ item-> get_variation_id ()? $ item-> get_variation_id (): $ item-> get_product_id ();
$ order-> update_meta_data ('_raw_location_id', $ _SESSION ['location_id']);
$ order-> update_meta_data ('_raw_wc_product', $ product_id);
}
- }