Intereting Posts

Сохранение метаданных по элементу и получение при завершении проверки

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

Нижеприведенный код успешен в том, что он перехватывает метаданные после перезагрузки страницы, поэтому я считаю, что это успех.

add_action('woocommerce_order_status_completed', 'order_system'); add_filter('woocommerce_add_cart_item_data', 'nick_add_cart_item_data', 10, 2); add_filter('woocommerce_get_cart_item_from_session', 'nick_get_cart_item_from_session', 10, 2); function nick_add_cart_item_data($cart_item_meta, $product_id) { global $woocommerce; $nick_form_data = get_post_meta($product_id, '_nick_form_data', true); $cart_item_meta['_nick_form_data'] = $nick_form_data; $cart_item_meta['_nick_credential_data']['username'] = ( isset( $_POST['username'] ) && $_POST['username'] != '') ? $_POST['username'] : ''; $cart_item_meta['_nick_credential_data']['password'] = ( isset( $_POST['password'] ) && $_POST['password'] != '') ? $_POST['password'] : ''; return $cart_item_meta; } function nick_get_cart_item_from_session($cart_item, $values) { if (isset($values['_nick_form_data'])) { $cart_item['_nick_form_data'] = $values['_nick_form_data']; } if (isset($values['_nick_credential_data'])) { $cart_item['_nick_credential_data'] = $values['_nick_credential_data']; echo $values['_nick_credential_data']['username'] . $values['_nick_credential_data']['password'] ; } return $cart_item; } 

Когда я вызываю эту функцию, которая срабатывает, когда заказ завершен, я не могу сохранить какие-либо метаданные элемента.

 function order_system($order_id) { global $woocommerce; try { // do something that can go wrong // instantiate new order from WooCommerce $order = new WC_Order($order_id); $userid = $order->user_id; foreach ($order->get_items() as $item_id => $values) : if (isset($values['_nick_form_data'])) : // Not getting inside this case statement endif; endforeach; .... 

Я не уверен, что я делаю неправильно, любая помощь приветствуется. Спасибо!!

Solutions Collecting From Web of "Сохранение метаданных по элементу и получение при завершении проверки"

Немного поздно, но: хотя вы привязываете свои метаданные к элементам корзины , они не добавляются впоследствии в элементы заказа при создании заказа. Для этого:

 function nick_add_order_item_meta($itemID, $values) { $nick_form_data = $values['_nick_form_data']; if (!empty($nick_form_data)) { wc_add_order_item_meta($itemID, '_nick_form_data', $nick_form_data); } } add_action('woocommerce_add_order_item_meta','nick_add_order_item_meta', 1, 2); 

В тот момент, когда ваш заказ будет создан, ваш элемент товара meta _nick_form_data будет прикреплен к каждому элементу. Затем вы сможете увидеть его в бэкэнде WooCommerce при просмотре заказа: каждый элемент заказа должен иметь рядом с ним [?] Который покажет вам прикрепленные метаданные.

Я считаю, что вы слишком поздно подключаетесь к функции «order_system».

Попробуйте подключиться сюда:

 add_action('woocommerce_checkout_process', array(&$this, 'nick_checkout_field_process') ); function nick_checkout_field_process() { global $woocommerce; try { // do something that can go wrong // instantiate new order from WooCommerce $order = new WC_Order($order_id); $userid = $order->user_id; foreach ($order->get_items() as $item_id => $values) : if (isset($values['_nick_form_data'])) : // Do Something here // echo $values['_nick_credential_data']['username'] . $values['_nick_credential_data']['password'] ; endif; endforeach; ....