ind*_*two 5 php wordpress woocommerce
我正在尝试以编程方式创建订单。使用wc_create_order()它非常简单:
$myProduct = new WC_Product(100);
$order = wc_create_order();
$order->add_product($myProduct, 1);
$order->calculate_totals();
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作,并为ID为100的简单产品创建了正确金额的订单。
但是,如果我尝试使用变体来执行此操作,则它似乎无法正确运行。经过反复试验,我可以通过这种方式进行工作:
$membershipProduct = new WC_Product_Variable(100);
$theMemberships = $membershipProduct->get_available_variations();
$trueProduct = new WC_Product(100);
$variationsArray = array();
foreach ($theMemberships as $membership) {
if ($membership['sku'] == $chosenVariation) {
$variationID = $membership['variation_id'];
$variationsArray = $membership['attributes'];
}
}
if ($variationID) {
$trueProduct->variation_id = $variationID;
}
$order = wc_create_order();
$order->add_product($trueProduct, 1, $variationsArray);
$order->calculate_totals();
Run Code Online (Sandbox Code Playgroud)
但是,尽管它确实使用正确的产品和正确的变体ID创建了订单,但该订单的总数始终为0(巧合的是,第一个变体的价格)。
最初,我尝试$order->add_product()使用从创建的对象new WC_Product_Variable(),但这导致根本没有将任何产品添加到订单中,这使我相信这是通过编程方式使用可变产品创建订单的问题。但是,按照这些调用的WooCommerce源代码,我看不到我在做什么错。
是否缺少我想要的东西,或者用可变产品创建订单的更好方法?
解决了。
即使我可能已经宣誓就此尝试过(但失败),但答案是不添加父产品($trueProduct在示例中),而是通过其 ID添加变异产品。
这可能以前已经失败了,因为正如@helgatheviking指出的那样,$variationsArray根据源我的格式不正确;我需要一个带有['variation']键的数组来发送正确的属性变体数组。
总的来说,我的工作代码现在看起来像这样:
$membershipProduct = new WC_Product_Variable(100);
$theMemberships = $membershipProduct->get_available_variations();
$variationsArray = array();
foreach ($theMemberships as $membership) {
if ($membership['sku'] == $chosenVariation) {
$variationID = $membership['variation_id'];
$variationsArray['variation'] = $membership['attributes'];
}
}
if ($variationID) {
$varProduct = new WC_Product_Variation($variationID);
$order = wc_create_order();
$order->add_product($varProduct, 1, $variationsArray);
$order->calculate_totals();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5222 次 |
| 最近记录: |