我有一个 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 表中的元键,其他什么也做不了。
这是我认为可能适用的逻辑:
我可以完成第一部分。这是第二部分,向 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';
}
刚创建订单时,您可以尝试执行的操作是检查此自定义订单项元数据的订单项并将其添加为订单元数据。但如果有多个项目(至少 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);