在 ShipStation for WooCommerce 中使用自定义订单项目元数据

问题描述 投票:0回答:1

我有一个 WooCommerce 商店,安装了 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
(相关元键为
_wc_checkout_add_on_value

有什么方法可以让上面的ShipStation功能在

_wc_checkout_add_on_value
表中查找
wp_woodcommerce_order_itemmeta
吗?

或者,作为解决方法,有没有办法返回固定文本字符串而不是元键?我已经尝试了我能想到的一切,但无法让它发挥作用。似乎需要

wp_postmeta
表中的元密钥,其他什么都做不了。

这是我认为可能适用的逻辑:

  1. 检查
    wp_woocommerce_order_itemmeta
    中的特定值 每个订单的表格
  2. 如果找到该值,请将“shipstation_custom_field_2”的固定文本字符串发送到 ShipStation。

我可以完成第一部分。这是第二部分,向 SS 发送固定值,我似乎无法开始工作。也许这个功能是不可能的。

任何想法或解决方法都将受到欢迎。

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';
}
php wordpress woocommerce metadata orders
1个回答
0
投票

刚创建订单时,您可以尝试执行的操作是检查此自定义订单项元数据的订单项并将其添加为订单元数据。但如果有多个项目(至少 2 个),您有 2 个选择:

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

下面的数据被保存为数组

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() as $item ) {
        $meta_value = $item->get_meta('_wc_checkout_add_on_value'); // Get the metadata

        if ( ! empty($meta_value) ) {
            $meta_sata[] = $meta_value;
        }
    }
    // Save as an array of values
    $order->add_meta_data('_wc_checkout_add_on_values', $meta_sata, true);
    $order->save();
}

代码位于子主题的functions.php文件中(或插件中)。

如果您想将其保存为逗号分隔的值字符串,请替换:

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

与:

    // Save as a comma separated string of values
    $order->add_meta_data('_wc_checkout_add_on_values', implode(', ', $meta_data), true);
© www.soinside.com 2019 - 2024. All rights reserved.