在 WooCommerce 管理员订单详细信息页面上的订单项目表中显示产品元数据

Posted

技术标签:

【中文标题】在 WooCommerce 管理员订单详细信息页面上的订单项目表中显示产品元数据【英文标题】:Show product meta in order items table on WooCommerce admin order details page 【发布时间】:2022-01-15 02:17:54 【问题描述】:

我正在使用以下代码在 WooCommerce 管理订单详细信息页面上的订单项目表中显示自定义产品元数据:

add_action('woocommerce_admin_order_item_headers', 'tempiconsegna_admin_order_item_headers');
function tempiconsegna_admin_order_item_headers()  
    $column_name = 'Tempi Consegna'; 
    echo '<th>' . $column_name . '</th>'; 
 

add_action('woocommerce_admin_order_item_values', 'tempiconsegna_admin_order_item_values', 10, 3);
function tempiconsegna_admin_order_item_values($_product, $item, $item_id = null) 
    $value = get_post_meta($_product->post->ID, 'prefix-tempiconsegna', 1); 
    echo '<td>' . $value . '</td>';

它显示“prefix-tempiconsegna”,它们是自定义元数据,例如:

3 天内可用 现已上市 等等..

我的问题是,如果我更改产品的可用性,它也会在之前的订单中更改。

当我更新产品的可用性时,如何在不改变的情况下显示订单此刻的价值?

【问题讨论】:

我已经更新了我的答案,这已经在 WooCommerce 5.9.0 中进行了测试。请阅读What should I do when someone answers my question?。确定答案是否有帮助,然后vote 和/或accept 它。 【参考方案1】:

您当前的代码包含 2 个错误:

尝试在 null 上读取属性“post” 尝试在 null 上读取属性“ID”

回答您的问题:这是因为您使用的是 get_post_meta() 和 productID,因此如果您调整产品的数据,它也会更改显示它的数据,在您的情况下是当前和以前的订单。

为了防止这种情况,您必须为每个订单行项目添加数据,这可以通过以下方式完成:

function action_woocommerce_checkout_create_order_line_item( $item, $cart_item_key, $values, $order ) 
    // The WC_Product instance Object
    $product = $item->get_product();
    
    // Get value
    $value = $product->get_meta( 'prefix-tempiconsegna' );
    
    // NOT empty
    if ( ! empty ( $value ) ) 
        $item->update_meta_data( 'prefix-tempiconsegna', $value );
    

add_action( 'woocommerce_checkout_create_order_line_item', 'action_woocommerce_checkout_create_order_line_item', 10, 4 );

然后要在 WooCommerce 管理订单详细信息页面中显示此内容,请使用:

// Add header
function action_woocommerce_admin_order_item_headers( $order ) 
    // Set the column name
    $column_name = __( 'Tempi Consegna', 'woocommerce' );
    
    // Display the column name
    echo '<th class="my-class">' . $column_name . '</th>';

add_action( 'woocommerce_admin_order_item_headers', 'action_woocommerce_admin_order_item_headers', 10, 1 );

//Add content
function action_woocommerce_admin_order_item_values( $product, $item, $item_id ) 
    // Only for "line_item" items type, to avoid errors
    if ( ! $item->is_type('line_item') ) return;

    // Get value
    $value = $item->get_meta( 'prefix-tempiconsegna' );
    
    // NOT empty
    if ( ! empty ( $value ) ) 
        echo '<td>' . $value . '</td>';
     else 
        echo '<td>Meta not found!</td>';        
    

add_action( 'woocommerce_admin_order_item_values', 'action_woocommerce_admin_order_item_values', 10, 3 );

【讨论】:

以上是关于在 WooCommerce 管理员订单详细信息页面上的订单项目表中显示产品元数据的主要内容,如果未能解决你的问题,请参考以下文章

Woocommerce在下订单后更新order_comments

在后端删除付款详细信息 Woocommerce 订单页面

更改 Woocommerce 结帐端点以显示订单摘要详细信息

在 WooCommerce 管理员订单列表上显示产品图片的问题

在 WooCommerce 电子邮件通知的订单详细信息表中隐藏自定义费用行

在Woocommerce管理订单页面中显示自定义结帐字段值