【发布时间】:2021-09-07 08:16:20
【问题描述】:
我已经看到这个问题出现在这里和那里,但还没有完全回答。我知道如何从订单中获取 WC_Order_Item_Shipping 信息,但是如何从订单运输方式项目中获取 WC_Shipping_Method 对象?
我通过 WooCommerce 运输方式的管理设置页面中的自定义字段存储了一些自定义选项。我想从订单中获取此字段。现在我正在这样做,我可以获取我的信息:
foreach ($order->get_shipping_methods() as $shipping_method) {
$options = get_option('woocommerce_' . $shipping_method->get_method_id() . '_' . $shipping_method->get_instance_id() . '_settings');
}
但这感觉没有未来的证据。如果保存数据的结构发生变化,那么一切都会中断。我宁愿使用来自 WC_Shipping_Method get_instance_option() 的 getter。问题是我不允许实例化这样的对象,而且似乎没有 wc_get_shipping_method() 函数可以用来根据实例 ID 获取方法,例如订单和产品。
我可以走很长的路,在付款后将此信息保存到订单元,但这似乎也不是一种优化的方式。我想获取当前保存的信息,而不是下订单时保存到订单中的信息。
我现在的做法是唯一的方法,还是有更好的方法?
编辑:
这是添加自定义字段的代码:
function shipping_instance_form_add_extra_fields($settings)
{
$settings['custom_shipping_id'] = [
'title' => 'Custom Shipping ID',
'type' => 'number',
'description' => '',
];
return $settings;
}
function shipping_instance_form_fields_filters()
{
$shipping_methods = WC()->shipping->get_shipping_methods();
foreach ($shipping_methods as $shipping_method) {
add_filter('woocommerce_shipping_instance_form_fields_' . $shipping_method->id, 'shipping_instance_form_add_extra_fields');
}
}
add_action('woocommerce_init', 'shipping_instance_form_fields_filters');
【问题讨论】:
标签: php wordpress woocommerce