Intereting Posts
Объединение массивов на основе ключей из другого массива Инъекция зависимостей PHP Передача переменных GET с использованием заголовка в PHP Запись строки в файл и принудительная загрузка в PHP Graph возвратил ошибку: Invalid appsecret_proof, предоставленный в аргументе API Как включить расширение php с помощью `phpize`? Практичность нескольких баз данных для каждого клиента по сравнению с одной базой данных PHP. Получить домашний каталог пользователя (для виртуального хостинга) PHP-элемент вставки XML после (или до) другого элемента Как использовать запрос базы данных с JOIN в режиме обработки на стороне сервера Как отображать изображения с FTP-сервера на странице HTML? Назначить значение базы данных MySQL переменной PHP php 5.3 fwrite () ожидает, что параметр 1 будет ошибкой ресурса Есть ли способ сделать saveAll () удалить посторонние объекты? jQuery форма представления формы не POSTING значения

Программно создавая новый порядок в Woocommerce

У меня сложнее всего программно создавать заказ в WooCommerce. Я использую приведенный ниже код и создаю заказ, но я не могу получить информацию о клиенте или товарные строки, добавленные в заказ. Новый заказ, который создается, просто как Гость без элементов, информации пользователя и т. Д.

Проблема заключается в том, что после создания объекта заказа он не работает при попытке добавить данные в заказ.

function create_vip_order() { global $woocommerce; $address = array( 'first_name' => '111Joe', 'last_name' => 'Conlin', 'company' => 'Speed Society', 'email' => 'joe@testing.com', 'phone' => '760-555-1212', 'address_1' => '123 Main st.', 'address_2' => '104', 'city' => 'San Diego', 'state' => 'Ca', 'postcode' => '92121', 'country' => 'US' ); // Now we create the order $order = wc_create_order(); // The add_product() function below is located in /plugins/woocommerce/includes/abstracts/abstract_wc_order.php $order->add_product( get_product( '275962' ), 1 ); // This is an existing SIMPLE product $order->set_address( $address, 'billing' ); // $order->calculate_totals(); $order->update_status("Completed", 'Imported order', TRUE); } add_action( 'woocommerce_init', 'create_vip_order' ); 

Вот ошибка, которую я получаю в своих журналах:

 [19-Apr-2016 21:16:38 UTC] PHP Fatal error: Uncaught Error: Call to a member function add_product() on boolean in /Users/joe/Sites/speedsociety-2/wp-content/themes/ss/lib/contests/order.php:107 Stack trace: #0 /Users/joe/Sites/speedsociety-2/wp-includes/plugin.php(525): create_vip_order('') #1 /Users/joe/Sites/speedsociety-2/wp-content/plugins/woocommerce/woocommerce.php(330): do_action('woocommerce_ini...') #2 /Users/joe/Sites/speedsociety-2/wp-includes/plugin.php(525): WooCommerce->init('') #3 /Users/joe/Sites/speedsociety-2/wp-settings.php(392): do_action('init') #4 /Users/joe/Sites/speedsociety-2/wp-config.php(67): require_once('/Users/joe/Site...') #5 /Users/joe/Sites/speedsociety-2/wp-load.php(37): require_once('/Users/joe/Site...') #6 /Users/joe/Sites/speedsociety-2/wp-admin/admin.php(31): require_once('/Users/joe/Site...') #7 /Users/joe/Sites/speedsociety-2/wp-admin/edit.php(10): require_once('/Users/joe/Site...') #8 {main} thrown in /Users/joe/Sites/speedsociety-2/wp-content/themes/ss/lib/contests/order.php on line 107 

Любая помощь по этому вопросу была бы оценена MOST!

Solutions Collecting From Web of "Программно создавая новый порядок в Woocommerce"

Проблема в вашем действии. Используйте следующий крючок:

 add_action('woocommerce_checkout_process', 'create_vip_order'); function create_vip_order() { global $woocommerce; $address = array( 'first_name' => '111Joe', 'last_name' => 'Conlin', 'company' => 'Speed Society', 'email' => 'joe@testing.com', 'phone' => '760-555-1212', 'address_1' => '123 Main st.', 'address_2' => '104', 'city' => 'San Diego', 'state' => 'Ca', 'postcode' => '92121', 'country' => 'US' ); // Now we create the order $order = wc_create_order(); // The add_product() function below is located in /plugins/woocommerce/includes/abstracts/abstract_wc_order.php $order->add_product( get_product('275962'), 1); // This is an existing SIMPLE product $order->set_address( $address, 'billing' ); // $order->calculate_totals(); $order->update_status("Completed", 'Imported order', TRUE); } 

Убедитесь, что указанный идентификатор продукта существует в системе.

Я на самом деле не мог понять вашу проблему, но предоставил вам другую альтернативу, это может вам помочь.

$woocommerce->cart я добавил продукты в $woocommerce->cart а затем присваиваю данные корзины новому порядку, созданному следующим образом:

// Для простого продукта

 $woocommerce->cart->add_to_cart($product_id, $quantity); 

// Для переменной продукции

  $woocommerce->cart->add_to_cart($product_id, $quantity, $variationID, $attr_array); $order_data = array( 'status' => apply_filters('woocommerce_default_order_status', 'processing'), 'customer_id' => $user_id ); $new_order = wc_create_order($order_data); foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) { $item_id = $new_order->add_product( $values['data'], $values['quantity'], array( 'variation' => $values['variation'], 'totals' => array( 'subtotal' => $values['line_subtotal'], 'subtotal_tax' => $values['line_subtotal_tax'], 'total' => $values['line_total'], 'tax' => $values['line_tax'], 'tax_data' => $values['line_tax_data'] // Since 2.2 ) ) ); } $new_order->set_address($address, 'billing'); $new_order->set_address($address, 'shipping'); 

Ну, вы можете сделать это без функции wc_create_order.

  $order_data = array(); $order_data[ 'post_type' ] = 'shop_order'; $order_data[ 'post_status' ] = 'wc-' . apply_filters( 'woocommerce_default_order_status', 'pending' ); $order_data[ 'ping_status' ] = 'closed'; $order_data[ 'post_author' ] = 1; $order_data[ 'post_password' ] = uniqid( 'order_' ); $order_data[ 'post_title' ] = sprintf( __( 'Order – %s', 'woocommerce' ), strftime( _x( '%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'woocommerce' ), strtotime( $post_date ) ) ); $order_data[ 'post_parent' ] = 12; // parent post id $order_data[ 'post_content' ] = ""; $order_data[ 'comment_status' ] = "open"; $order_data[ 'post_name' ] = sanitize_title( sprintf( __( 'Order – %s', 'woocommerce' ), strftime( _x( '%b %d, %Y @ %I:%M %p', 'Order date parsed by strftime', 'woocommerce' ), strtotime( $post_date) ) ) ); $order_id = wp_insert_post( apply_filters( 'woocommerce_new_order_data', $order_data ), true ); 

Затем вы можете использовать этот $ order_id для добавления других деталей, например …

 $order = wc_get_order( $order_id ); $product_item_id = $order->add_product( wc_get_product( $product_id )); wc_add_order_item_meta($product_item_id,"meta_key","meta_values"); $addressShipping = array( 'first_name' => $shippingName, 'email' => $user_email_id, 'phone' => $billingPhone, 'address_1' => $shippingAddress, 'address_2' => $shippingAddress2, 'city' => $shippingCity, 'state' => $shippingStateCode, 'postcode' => $shippingZip, 'country' => 'US'); $order->set_address( $addressShipping, 'shipping' ); $addressBilling = array( 'first_name' => $billingName, 'email' => $user_email_id, 'phone' => $billingPhone, 'address_1' => $billingAddress, 'address_2' => $billingAddress2, 'city' => $billingCity, 'state' => $billingStateCode, 'postcode' => $billingZip, 'country' => 'US'); $order->set_address( $addressBilling, 'billing' ); $order->calculate_totals(); 

вы почти получили его, add_action( 'woocommerce_init', 'create_vip_order' ); woocommerce_init слишком рано, вам нужно изменить свой крючок, по крайней мере, на init, ваши ошибки

 [19-Apr-2016 21:16:38 UTC] PHP Fatal error: Uncaught Error: Call to a member function add_product() on boolean in /Users/joe/Sites/speedsociety-2/wp-content/themes/ss/lib/contests/order.php:107 Stack trace: #0 /Users/joe/Sites/speedsociety-2/wp-includes/plugin.php(525): create_vip_order('') #1 /Users/joe/Sites/speedsociety-2/wp-content/plugins/woocommerce/woocommerce.php(330): do_action('woocommerce_ini...') #2 /Users/joe/Sites/speedsociety-2/wp-includes/plugin.php(525): WooCommerce->init('') #3 /Users/joe/Sites/speedsociety-2/wp-settings.php(392): do_action('init') #4 /Users/joe/Sites/speedsociety-2/wp-config.php(67): require_once('/Users/joe/Site...') #5 /Users/joe/Sites/speedsociety-2/wp-load.php(37): require_once('/Users/joe/Site...') #6 /Users/joe/Sites/speedsociety-2/wp-admin/admin.php(31): require_once('/Users/joe/Site...') #7 /Users/joe/Sites/speedsociety-2/wp-admin/edit.php(10): require_once('/Users/joe/Site...') #8 {main} thrown in /Users/joe/Sites/speedsociety-2/wp-content/themes/ss/lib/contests/order.php on line 107 

показать, что это происходит, переменная $ order была возвращена false и, следовательно, вы не можете использовать $order->add_product

вот мой рабочий код

 function create_vip_order() { global $woocommerce; $address = array( 'first_name' => '111Joe', 'last_name' => 'Conlin', 'company' => 'Speed Society', 'email' => 'joe@testing.com', 'phone' => '760-555-1212', 'address_1' => '123 Main st.', 'address_2' => '104', 'city' => 'San Diego', 'state' => 'Ca', 'postcode' => '92121', 'country' => 'US' ); // Now we create the order $order = wc_create_order(); // The add_product() function below is located in /plugins/woocommerce/includes/abstracts/abstract_wc_order.php $order->add_product( get_product( '129' ), 1 ); // This is an existing SIMPLE product $order->set_address( $address, 'billing' ); // $order->calculate_totals(); $order->update_status("Completed", 'Imported order', TRUE); } add_action( 'init', 'create_vip_order' ); 

Удачи и счастливого кодирования: D