Php 变更单项目自定义元数据在管理订单中显示标签和值

Php 变更单项目自定义元数据在管理订单中显示标签和值,php,wordpress,woocommerce,backend,orders,Php,Wordpress,Woocommerce,Backend,Orders,在Woocommerce管理屏幕中,我试图使用订单行元数据显示一个按钮,该按钮将打开一个包含dropship供应商URL的新窗口。我已成功从订单上的产品中提取供应商URL,并将其推送到订单行项目 我可以将元数据更改为按钮,但其结果是包含自定义选项的其他自定义字段被删除 这是我添加到functions.php文件中的完整代码 add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_orde

在Woocommerce管理屏幕中,我试图使用订单行元数据显示一个按钮,该按钮将打开一个包含dropship供应商URL的新窗口。我已成功从订单上的产品中提取供应商URL,并将其推送到订单行项目

我可以将元数据更改为按钮,但其结果是包含自定义选项的其他自定义字段被删除

这是我添加到
functions.php
文件中的完整代码

add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 20, 4 );
function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
    // Get a product custom field value
    $custom_field_value = get_post_meta( $item->get_product_id(), 'supplier_url', true );
    // Update order item meta
    if ( ! empty( $custom_field_value ) ){
        $item->update_meta_data( '_supplier', $custom_field_value );
    }
}

add_filter('woocommerce_order_item_display_meta_key', 'filter_wc_order_item_display_meta_key', 20, 3 );
function filter_wc_order_item_display_meta_key( $display_key, $meta, $item ) {

    // Change display_key
    if( $meta->key === '_supplier' && is_admin() )
        $display_key = __("Supplier", "woocommerce" );

    return $display_key;    
}

add_filter( 'woocommerce_order_item_display_meta_value', 'change_order_item_meta_value', 20, 3 );
function change_order_item_meta_value( $value, $meta, $item ) {

    // Display supplier meta value as a button
    if( $meta->key === '_supplier' && is_admin() ) {
        $display_value = __('<a class="button" target="_blank" href="'.$value.'">Order</a>', 'woocommerce' );

        return $display_value;    
    }
}
添加操作('woocommerce\u checkout\u create\u order\u line\u item'、'custom\u checkout\u create\u order\u line\u item',20,4);
函数自定义\签出\创建\订单\行\项目($item、$cart\项目\ key、$values、$order){
//获取产品自定义字段值
$custom\u field\u value=get\u post\u meta($item->get\u product\u id(),'supplier\u url',true);
//更新订单项目元数据
如果(!空($custom_field_value)){
$item->update_meta_数据('u supplier',$custom_field_value);
}
}
添加过滤器('WOOMerce\u order\u item\u display\u meta\u key','filter\u wc\u order\u item\u display\u meta\u key',20,3);
函数过滤器\u wc\u order\u item\u display\u meta\u key($display\u key,$meta,$item){
//更改显示键
如果($meta->key==='\\供应商'&&is\\管理())
$display_key=uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
返回$display_键;
}
添加过滤器('woocommerce\u order\u item\u display\u meta\u value','change\u order\u item\u meta\u value',20,3);
函数更改\顺序\项目\元\值($value,$meta,$item){
//将供应商元值显示为按钮
如果($meta->key==='\\供应商'&&is\\管理()){
$display_value=uuuuuu(“'woocommerce');
返回$display\u值;
}
}
这些图像显示了使用最后一段代码之前和之后的情况

之前:

之后:


我的代码哪里出了问题?我想实现的是什么?

主要错误是在最后一个函数中,
$display\u value
应该被替换为
$value
,然后
返回$value应位于最后一个闭合支架之前的末端

我还重新访问了您的所有代码:

add_action( 'woocommerce_checkout_create_order_line_item', 'custom_checkout_create_order_line_item', 20, 4 );
function custom_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) {
    $supplier_url = $values['data']->get_meta( 'supplier_url' ); // Get product custom field value
    
    // add product custom field as custom order item meta data
    if ( ! empty($supplier_url) ){
        $item->update_meta_data( '_supplier', $supplier_url );
    }
}

add_filter('woocommerce_order_item_display_meta_key', 'filter_wc_order_item_display_meta_key', 20, 3 );
function filter_wc_order_item_display_meta_key( $display_key, $meta, $item ) {

    // Change displayed label for specific order item meta key
    if( is_admin() && $item->get_type() === 'line_item' && $meta->key === '_supplier' ) {
        $display_key = __("Supplier", "woocommerce" );
    }
    return $display_key;
}

add_filter( 'woocommerce_order_item_display_meta_value', 'change_order_item_meta_value', 20, 3 );
function change_order_item_meta_value( $value, $meta, $item ) {

    // Change displayed value for specific order item meta key
    if( is_admin() && $item->get_type() === 'line_item' && $meta->key === '_supplier' ) {
        $value = __('<a class="button" target="_blank" href="'.$value.'">Order</a>', 'woocommerce' );
    }
    return $value;
}
添加操作('woocommerce\u checkout\u create\u order\u line\u item'、'custom\u checkout\u create\u order\u line\u item',20,4);
函数自定义\签出\创建\订单\行\项目($item、$cart\项目\ key、$values、$order){
$supplier\u url=$values['data']->get\u meta('supplier\u url');//获取产品自定义字段值
//将产品自定义字段添加为自定义订单项元数据
如果(!空($supplier_url)){
$item->update_meta_数据('u supplier',$supplier\u url);
}
}
添加过滤器('WOOMerce\u order\u item\u display\u meta\u key','filter\u wc\u order\u item\u display\u meta\u key',20,3);
函数过滤器\u wc\u order\u item\u display\u meta\u key($display\u key,$meta,$item){
//更改特定订单项目元键的显示标签
如果(是_admin()&&$item->get_type()=='line_item'&&&$meta->key=='u supplier'){
$display_key=uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
}
返回$display_键;
}
添加过滤器('woocommerce\u order\u item\u display\u meta\u value','change\u order\u item\u meta\u value',20,3);
函数更改\顺序\项目\元\值($value,$meta,$item){
//更改特定订单项目元键的显示值
如果(是_admin()&&$item->get_type()=='line_item'&&&$meta->key=='u supplier'){
$value=_uu(“'woocommerce');
}
返回$value;
}

代码进入活动子主题(或活动主题)的functions.php文件。经过测试,效果良好。

非常感谢您对以下答案的反馈。现在刚刚测试过,效果非常好。非常感谢你的帮助。