我最困难的时间是在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
任何帮助,将不胜感激!
问题出在您的动作挂钩上。使用以下钩子:
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); }
确保给定的产品ID在系统中。