我有一家WooCommercestore ,安装了ShipStation for WooCommerce插件.它们提供了一个简单的PHP函数来将与订单相关联的定制字段数据发送到ShipStation.以下是其中的一小段:

add_filter( 'woocommerce_shipstation_export_custom_field_2', 'shipstation_custom_field_2' );
function shipstation_custom_field_2() {
    return '_meta_key'; // Replace this with the key of your custom field
}

只要您要设置的_meta_key位于wp_postmeta表中,这就非常有效.但是元密钥位于wp_woocommerce_order_itemmeta(the related meta key is 103)中.

有没有办法让上面的ShipStation函数在wp_woodcommerce_order_itemmeta表中查找_wc_checkout_add_on_value

或者,作为一种解决办法,有没有办法返回固定的文本字符串而不是元键?我试了我能想到的所有方法,但就是不能奏效.似乎想要wp_postmeta表中的元密钥,其他什么都不能做.

以下是我认为可能在这里起作用的逻辑:

  1. 判断wp_woocommerce_order_itemmeta中的特定值 每个订单的表格
  2. 如果找到该值,则为发送到ShipStation的"ShipStation_CUSTOM_FIELD_2"发送固定文本字符串.

我可以做第一部分.这是第二部分,向SS发送一个固定值,我似乎无法正常工作.也许这是不可能的与此功能.

任何 idea 或变通方法都是最受欢迎的.

add_filter( 'woocommerce_shipstation_export_custom_field_2', 'shipstation_custom_field_2' );

function shipstation_custom_field_2() {
    //return '_meta_key'; // Replace this with the key of your custom field
    //return 'test';
    echo 'test';
}

推荐答案

Updated:在刚创建订单时,您可以try 执行以下操作:判断订单项中的此自定义订单项元数据,并将其添加为订单元数据.

但如果有多个项目(至少2个),您有2个 Select :

  • 在保存之前将数据合并为逗号分隔的字符串,
  • 保存前先在数组中设置数据.

So there are 2 cases:

1).将数据设置为逗号分隔的字符串(for one or multiple items)

add_action( 'woocommerce_checkout_order_created', 'save_order_item_meta_as_order_meta' );
function save_order_item_meta_as_order_meta( $order ) {
    $meta_data = array(); // Initializing

    // loop through order items
    foreach( $order->get_items(['line_item', 'shipping', 'fee', 'coupon', 'tax']) as $item ) {
        $meta_value = $item->get_meta('_wc_checkout_add_on_value'); // Get the metadata

        if ( ! empty($meta_value) ) {
            $meta_data[] = $meta_value;
        }
    }

    if ( empty($meta_data) ) return; // Exit if emptty

    // Save as a comma separated string of values
    $order->add_meta_data('_wc_checkout_add_on_values', implode(', ', $meta_data), true);
    $order->save();
}

代码放在子主题的functions.php文件中(或插件中).

您可以在implode()函数中随意更改分隔符', '.

如果只有一个订单项,您将获得与订单项中相同的值.


2).将数据设置为array of values (for one or multiple items)

只需在我的函数中替换:

    // Save as a comma separated string of values
    $order->add_meta_data('_wc_checkout_add_on_values', implode(', ', $meta_data), true);

有:

    // Save as an array of values
    $order->add_meta_data('_wc_checkout_add_on_values', $meta_data, true);

要完成,请执行以下操作:

您将按如下方式使用您的ShipStation Filter挂钩:

add_filter( 'woocommerce_shipstation_export_custom_field_2', 'shipstation_custom_field_2' );
function shipstation_custom_field_2() {
    return '_wc_checkout_add_on_values'; 
}

Php相关问答推荐

Symfony Monolog:使用多个格式化程序

PHP:从数组中获取唯一的数字组合

WooCommerce购物车中仅允许一个可下载产品

如何在函数中定位WooCommerce产品循环

如何使用这种格式构建XML?

在WooCommerce中添加基于类别的固定费用

使用PHP curl的Amazon SP API批处理调用

添加登录:需要app.yaml仍然允许所有拥有Google帐户的人访问

删除了数组中的值,而不是多个数组

Codeigniter 4中的未定义变量$HOME

Laravel处理belongToMany和额外字段

如何在codeigniter中将order_by RAND与下面的代码一起使用

除WooCommerce中的特定国家/地区外,有条件地要求填写邮政编码 checkout 字段

如何批量处理消息总线中的消息

将可编辑的计费自定义字段添加到 WooCommerce 管理单个订单

如何使用 PHP 将带有图像的文本上传到 Linkedin?

需要以一种形式执行两个操作

图片上传成功

Laravel auth()->id() 在生产服务器中不工作

Laravel 模型将日期保存为空