Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何基于发货方法向商业订单添加自定义元数据_Php_Wordpress_Woocommerce_Meta_Shipping - Fatal编程技术网

Php 如何基于发货方法向商业订单添加自定义元数据

Php 如何基于发货方法向商业订单添加自定义元数据,php,wordpress,woocommerce,meta,shipping,Php,Wordpress,Woocommerce,Meta,Shipping,我正在寻找一个解决方案,根据结帐时选择的发货方式,在WooCommerce中为每个订单添加自定义元。据我所知,自从WooCommerce 3.0以来,已经有了一些更新,所以我很难找到一个明确的答案 这是我到目前为止所拥有的 根据WC3+/CRUD方法,应为: add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2); function before_checkout_cre

我正在寻找一个解决方案,根据结帐时选择的发货方式,在WooCommerce中为每个订单添加自定义元。据我所知,自从WooCommerce 3.0以来,已经有了一些更新,所以我很难找到一个明确的答案

这是我到目前为止所拥有的

根据WC3+/CRUD方法,应为:

    add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
    $order->update_meta_data( '_custom_meta_key', 'value' );
}
根据,您可以有条件地使用装运方法,使用:

// Conditional function based on the Order shipping method 
if( $order->has_shipping_method('flat_rate') ) { 
我遇到的问题是如何组合这些函数。以下是我尝试过的,但似乎不起作用:

add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
    if( $order->has_shipping_method('Special Delivery') ) { 
    $order->update_meta_data( 'royal_mail_shipping_code', 'SD1' );
    }
    if( $order->has_shipping_method('Royal Mail Tracked 48') ) { 
    $order->update_meta_data( 'royal_mail_shipping_code', 'TPS' );
    }
}
如果您能帮助以上代码正常工作,我们将不胜感激

试试这个:

add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {

if( $order->has_shipping_method('Special Delivery') ) {
$order = wc_get_order( $order_id );
$order->update_meta_data( 'royal_mail_shipping_code', 'SD1' );
$order->save();
}
if( $order->has_shipping_method('Royal Mail Tracked 48') ) {
$order = wc_get_order( $order_id );
$order->update_meta_data( 'royal_mail_shipping_code', 'TPS' );
$order->save();
}
} , 10, 2);

当使用
WC\u Order
method
has\u shipping\u method()
时,您需要使用shipping method ID使其工作,直到最近,以下代码还在工作,但if语句现在似乎失败了:
add\u操作('woocommerce\u checkout\u create\u Order',before\u checkout\u create\u Order',20,2);结账前函数创建订单($order,$data){if($order->has_shipping_方法('table_rate:9')){$order->update_meta_数据('royal_mail_shipping_code','SD1');}if($order->has_shipping_方法('table_rate:8')){$order->update meta data('royal_mail_shipping_代码,'TPS48'))}否则$order更新_meta数据('royal_mail_shipping_code','No Value');
有人对此有任何进一步的指导吗?到目前为止,我有这个代码'add_action'('woocommerce_checkout_create_order','before_checkout_create_order',20,2');函数before_checkout_create_order('order,$data){if($order->has_shipping_method('table_rate:9')){$order->update_meta_data('royal_mail_shipping_code','SD1');}if('order->has_shipping_method('table_rate:8')){$order->update_meta_data('royal_mail_shipping_code','TPS48');}else$order->update_meta data('royal_mail_shipping_code','No Value')}}唯一不起作用的是“if”($order->has_shipping_method('table_rate:9'))“新方法应该改用method_id&instance_id,但我不知道如何将其添加到if语句中