以编程方式为订阅产品创建 WooCommerce 订单
Creating a WooCommerce Order programmatically for a subscription product
对于 woocommerce,我使用的是 WooCommerce 订阅插件。我创建了一个函数,可以使用 wc_get_product_id_by_sku()
函数从订阅产品创建基于产品 SKU 的订单。
这是我目前的职能:
function create_new_order() {
global $woocommerce;
$address = array(
'first_name' => 'Zakup',
'last_name' => 'Sklepowy',
'email' => 'test@test.pl',
'phone' => '123',
'address_1' => 'ul. Przykladowa 1',
'address_2' => 'm. 2',
'city' => 'Wroclaw',
'postcode' => '50-123',
);
$order = wc_create_order();
$product = new WC_Product( wc_get_product_id_by_sku( 'wpoh-prof-webshop' ) );
$order->add_product( $product, 1 );
$order->set_address( $address, 'billing' );
// Set payment gateway
$payment_gateways = WC()->payment_gateways->payment_gateways();
$order->set_payment_method( $payment_gateways['cod'] );
// Calculate totals
$order->calculate_totals();
$order->update_status( 'completed', 'In Store ', true );
}
这一行:
$product = new WC_Product (wc_get_product_id_by_sku ('wpoh-prof-webshop'));
我取了要下订单的产品。我已根据需要在此函数中硬编码客户帐单地址。
当我 运行 该函数时,会创建一个没有附加任何产品或地址的空订单。
在没有个人信息或产品的情况下创建的订单:
谁能帮我告诉我哪里出了问题?
获取以下订阅产品对象之一:
WC_Product_Subscription
(一个subscription
产品类型,简单订阅),
WC_Product_Variable_Subscription
(一个variable-subscription
产品类型),
WC_Product_Subscription_Variation
(一个subscription_variation
产品类型).
您可以不使用new WC_Product()
,因为它会引发错误。
您应该使用 wc_get_product()
函数。
现在 global $woocommerce;
不是必需的,什么也不做。
SKU: Get the product object from a product ID using wc_get_product_id_by_sku()
function:
The SKU should always be from a simple subscription or a variation subscription, but never from a variable subscription product…
尝试以下稍微修改的函数:
function create_new_order() {
$sku = 'wpoh-prof-webshop';
$address = array(
'first_name' => 'Zakup',
'last_name' => 'Sklepowy',
'email' => 'test@test.pl',
'phone' => '123',
'address_1' => 'ul. Przykladowa 1',
'address_2' => 'm. 2',
'city' => 'Wroclaw',
'postcode' => '50-123',
);
$order = wc_create_order(); // Create a WC_Order object and save it.
$order->set_address( $address, 'billing' ); // Set customer billing adress
$product = wc_get_product( wc_get_product_id_by_sku( $sku ) );
$order->add_product( $product, 1 ); // Add an order line item
// Set payment gateway
$payment_gateways = WC()->payment_gateways->payment_gateways();
$order->set_payment_method( $payment_gateways['cod'] );
$order->calculate_totals(); // Update order taxes and totals
$order->update_status( 'completed', 'In Store ', true ); // Set order status and save
}
已测试并有效。
相关回答:
Maarten de Wolf,您可以将其添加到单独的 .php 文件中,但需要通过添加来接受它:
require(dirname(__FILE__) . '/wp-load.php');
在脚本之前(它加载例如会话信息 - 您以管理员身份登录)。
对于 woocommerce,我使用的是 WooCommerce 订阅插件。我创建了一个函数,可以使用 wc_get_product_id_by_sku()
函数从订阅产品创建基于产品 SKU 的订单。
这是我目前的职能:
function create_new_order() {
global $woocommerce;
$address = array(
'first_name' => 'Zakup',
'last_name' => 'Sklepowy',
'email' => 'test@test.pl',
'phone' => '123',
'address_1' => 'ul. Przykladowa 1',
'address_2' => 'm. 2',
'city' => 'Wroclaw',
'postcode' => '50-123',
);
$order = wc_create_order();
$product = new WC_Product( wc_get_product_id_by_sku( 'wpoh-prof-webshop' ) );
$order->add_product( $product, 1 );
$order->set_address( $address, 'billing' );
// Set payment gateway
$payment_gateways = WC()->payment_gateways->payment_gateways();
$order->set_payment_method( $payment_gateways['cod'] );
// Calculate totals
$order->calculate_totals();
$order->update_status( 'completed', 'In Store ', true );
}
这一行:
$product = new WC_Product (wc_get_product_id_by_sku ('wpoh-prof-webshop'));
我取了要下订单的产品。我已根据需要在此函数中硬编码客户帐单地址。
当我 运行 该函数时,会创建一个没有附加任何产品或地址的空订单。
在没有个人信息或产品的情况下创建的订单:
谁能帮我告诉我哪里出了问题?
获取以下订阅产品对象之一:
WC_Product_Subscription
(一个subscription
产品类型,简单订阅),WC_Product_Variable_Subscription
(一个variable-subscription
产品类型),WC_Product_Subscription_Variation
(一个subscription_variation
产品类型).
您可以不使用new WC_Product()
,因为它会引发错误。
您应该使用 wc_get_product()
函数。
现在 global $woocommerce;
不是必需的,什么也不做。
SKU: Get the product object from a product ID using
wc_get_product_id_by_sku()
function:The SKU should always be from a simple subscription or a variation subscription, but never from a variable subscription product…
尝试以下稍微修改的函数:
function create_new_order() {
$sku = 'wpoh-prof-webshop';
$address = array(
'first_name' => 'Zakup',
'last_name' => 'Sklepowy',
'email' => 'test@test.pl',
'phone' => '123',
'address_1' => 'ul. Przykladowa 1',
'address_2' => 'm. 2',
'city' => 'Wroclaw',
'postcode' => '50-123',
);
$order = wc_create_order(); // Create a WC_Order object and save it.
$order->set_address( $address, 'billing' ); // Set customer billing adress
$product = wc_get_product( wc_get_product_id_by_sku( $sku ) );
$order->add_product( $product, 1 ); // Add an order line item
// Set payment gateway
$payment_gateways = WC()->payment_gateways->payment_gateways();
$order->set_payment_method( $payment_gateways['cod'] );
$order->calculate_totals(); // Update order taxes and totals
$order->update_status( 'completed', 'In Store ', true ); // Set order status and save
}
已测试并有效。
相关回答:
Maarten de Wolf,您可以将其添加到单独的 .php 文件中,但需要通过添加来接受它:
require(dirname(__FILE__) . '/wp-load.php');
在脚本之前(它加载例如会话信息 - 您以管理员身份登录)。