在 Woocommerce 中以编程方式设置或更新产品运输 class

Set or update product shipping class programmatically in Woocommerce

美好的一天, 我一直在尝试弄清楚如何使用 php 以编程方式 select 发送 class。我正在使用表单从前端创建一个 woocommerce 产品,并在表单提交时创建了产品,但我可以让任何运输 class 成为 selected。下面的屏幕截图显示了从前端创建的产品的运输 class 设置,其中检查元素选项卡显示了运输 classes

的 ID(作为值)

我正在使用以下代码 select phone 运费 Class

$pShipping_Class = 25; //Where 25 is the id/value for Phone Shipping Fee Class
update_post_meta( $product_id, 'product_shipping_class', $pShipping_Class );

update_post_meta 适用于所有其他字段,即使是我创建的自定义下拉字段我也能够使用 update_post_meta( $product_id, '_list_of_stores', 'custom-order' ); 到 select 自定义下拉列表中的值 custom-order我创建的字段,但是当我对运输 class 尝试同样的事情时,它不起作用。不确定我做错了什么。

请指出正确的方向。我如何使用 php 更新运费 class。我已经有了 ID 和 slug。

谢谢

更新:我意识到当我手动 select Phone 运费并点击更新产品按钮时。它添加了 selected 属性 (即 selected="selected" ),见下面的截图;

请问我如何制作这个 update/select 任何运费 class(通过 ID 或 slug),因为运费 class 需要即时更新以提供用户他们创建并添加到购物车的产品的运费。

Shipping classes are not managed by post meta data for the products. They are managed by a custom taxonomy, so you can't use update_post_meta() function.

在 Woocommerce 中,运输 类 由自定义分类法 product_shipping_class 管理,您需要使用 wp_set_post_terms() 函数来实现以编程方式工作,如:

$shipping_class_id = 25; // the targeted shipping class ID to be set for the product

// Set the shipping class for the product
wp_set_post_terms( $product_id, array($shipping_class_id), 'product_shipping_class' );

或者从 Woocommerce 3 开始,您可以这样使用 WC_Product CRUD method set_shipping_class_id()

$shipping_class_id = 25; // the targeted shipping class ID to be set for the product

$product = wc_get_product( $product_id ); // Get an instance of the WC_Product Object

$product->set_shipping_class_id( $shipping_class_id ); // Set the shipping class ID 

$product->save(); // Save the product data to database