Я пытаюсь установить метаданные на предмет, когда он добавлен в корзину, сохраняйте его при каждой перезагрузке страницы и при успешном завершении проверки метаданные передаются отдельному 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; ....
Я не уверен, что я делаю неправильно, любая помощь приветствуется. Спасибо!!
Немного поздно, но: хотя вы привязываете свои метаданные к элементам корзины , они не добавляются впоследствии в элементы заказа при создании заказа. Для этого:
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; ....