【问题标题】:Is there a better way to get shipping method meta/settings from order in WooCommerce?有没有更好的方法从 WooCommerce 中的订单中获取运输方式元/设置?
【发布时间】: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


    【解决方案1】:

    如果您已经有运输方法实例 id,您可以简单地创建类 WC_Shipping_Method 的实例,并将其实例 id 作为构造函数参数,如 $method = new WC_Shipping_Method($instance_id)。之后,您可以使用方法get_instance_option 来获取该选项的值,例如$custom_shipping_id = $method->get_instance_option('custom_shipping_id');

    【讨论】:

      猜你喜欢
      • 2020-08-31
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 2014-11-18
      • 2019-08-04
      • 1970-01-01
      相关资源
      最近更新 更多