我有最困难的时间在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
在此方面的任何帮助都将不胜感激!
我实际上不明白你的问题,但给你另一个选择,这可能会帮助你。
我在$woocommerce中添加了产品-
//对于简单的产品
$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\u 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_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。
问题内容: 我最困难的时间是在WooCommerce中以编程方式创建订单。我正在使用下面的代码,是否正在创建订单,但是我无法获得客户信息或添加到订单的产品线项目。创建的新订单只是访客,没有任何物品,用户信息等。 问题似乎是,一旦创建了订单对象,尝试向订单中添加数据时就会失败。 这是我在日志中遇到的错误: 任何帮助,将不胜感激! 问题答案: 问题出在您的动作挂钩上。使用以下钩子: 确保给定的产品ID
问题内容: 我尝试以编程方式实现UITableView,而不使用xib或Storyboards。这是我的代码: ViewController.swift MyTableViewController.swift 但是当我运行应用程序时,我得到的只是空表。在日志中,我看到了和的几行,但没有。如何修复此代码以获取包含6行文本的表格? 问题答案: 注意: 正如您提到的,您刚刚开始在中进行编程。我以编程方式
问题内容: 我正在尝试为自己创建一个自定义单元,但是遇到了一些困难。 首先,我无法使用InterfaceBuilder,因为我正在Xcode中对该bug进行变体。每次我在Interface Builder中单击一个元素时,该视图中的所有内容的高度和宽度均为零,并在视图外部重新定位。此外,我想学习如何以编程方式执行此操作。 其次,我在项目中使用Swift语言。我一直在尝试遵循此演示,并尽最大努力将O
问题内容: 我正在尝试以编程方式构建UI。如何使该动作起作用?我正在用Swift开发。 viewDidLoad中的代码: 问题答案: 您只是在选择器名称的末尾缺少冒号。因为按下需要一个参数,所以冒号必须在该位置。而且,您按下的函数不应嵌套在viewDidLoad中。 编辑:更新以反映Swift 2.2中的最佳实践。应该使用#selector()而不是不推荐使用的文字字符串。
我将此代码用于新订单并设置完成状态。 之后,woocommerce自动发送电子邮件给买家。 但我不想发这封邮件。 我怎么能? 注意:我不想禁用从wp-admin发送电子邮件
问题内容: 我需要在我的应用程序中动态创建任务。我怎样才能做到这一点?我可以获取带有注释的调度程序,但是调度程序需要对象。我需要提供Spring对象,以便我的任务也可以使用注释。 问题答案: 您只需要将目标对象包装在中,然后提交: