在 WooCommerce 管理订单页面上将产品自定义字段显示为订单项元

Display product custom field as order item meta on WooCommerce admin order pages

我用一堆自定义元数据创建了我的 woocommerce 产品(水果和蔬菜),我可以在我的网站上正确输入和显示它们。其中一个数据是单位(即千克、6 盒等)。

管理订单页面,我想在产品名称的正下方显示这个“单位”字段(例如:草莓 - 千克/鸡蛋 - 盒6 等)。

我尝试了以下代码并得到了以下结果(见屏幕截图):

add_action( 'woocommerce_before_order_itemmeta', 'unit_before_order_itemmeta', 10, 3 );
function unit_before_order_itemmeta( $item_id, $item, $_product ){
        if( $unit = $_product->get_meta('unite') ) {
        echo '<p>'.$unit.'</p>';}
}

结果如下: Screemshot single order page => 元字段 'unit' 正确显示在每个产品下,但由于某种原因它破坏了页面并且我在页面底部有一条严重错误消息(以红色突出显示)。

我在这里阅读了很多关于捕获和显示(return、打印...)我的元数据的不同方式的帖子,但我总是遇到这个严重错误。

有人可以帮助我了解我的代码有什么问题吗?

您需要仅定位订单“行”项目和管理员以避免错误,如下所示:

add_action( 'woocommerce_before_order_itemmeta', 'unit_before_order_itemmeta', 10, 3 );
function unit_before_order_itemmeta( $item_id, $item, $product ){
    // Only "line" items and backend order pages
    if( ! ( is_admin() && $item->is_type('line_item') ) ) return;

    $unit = $product->get_meta('unite');
    if( ! empty($unit) ) {
        echo '<p>'.$unit.'</p>';
    }
}

现在应该可以更好地工作了,没有错误。