如何从WooCommerce中的元键访问定制订单项目元数据?

时间:2019-09-23 作者:Danny

我试图显示一些自定义元数据,这些元数据和WooCommerce中订单的发货相关。下面是我正在做的全部故事(这样可能会帮助其他人,所以你完全知道我在做什么)。。。。

创建订单时,我将提前期作为元数据附加到订单的发货项目。以下是参考代码:

add_action( \'woocommerce_checkout_create_order_shipping_item\', \'add_leadtime_meta\',  20, 4  );

function add_leadtime_meta( &$item, $package_key, $package, $order ) {
    $lt = get_current_lead_time();   
    $item->add_meta_data( \'Lead Time\', $lt, true );
}
当我查看数据库时,它正在创建中,并且order\\u item\\u id与该订单上发货的order\\u item\\u id匹配,因此一切正常(我可以看到它显示在后端订单显示视图中)。

我想弄清楚的是如何手动提取这些数据,以便在站点周围的几个位置(以及电子邮件中)显示这些数据。我从用户帐户订单页(/我的帐户/订单/)开始。我已经添加了一列来显示这个值,我正在尝试找出如何获取数据。下面是我如何添加一列以防有人好奇的代码:

add_filter( \'woocommerce_account_orders_columns\', \'new_orders_columns\' );
function new_orders_columns( $columns = array() ) {

// Hide the columns
if( isset($columns[\'order-total\']) ) {
    // Unsets the columns which you want to hide
    unset( $columns[\'order-number\'] );
    unset( $columns[\'order-date\'] );
    unset( $columns[\'order-status\'] );
    unset( $columns[\'order-total\'] );
    unset( $columns[\'order-actions\'] );
}

// Add columns back with new one so we can set the order
$columns[\'order-number\'] = __( \'Invoice\', \'Text Domain\' );
$columns[\'order-date\'] = __( \'Order Date\', \'Text Domain\' );
$columns[\'order-lead-time\'] = __( \'Lead Time\', \'Text Domain\' );
$columns[\'order-status\'] = __( \'Status\', \'Text Domain\' );
$columns[\'order-total\'] = __( \'Total\', \'Text Domain\' );
$columns[\'order-actions\'] = __( \'Action\', \'Text Domain\' );

return $columns;
}
我正在努力将我上面存储的交付周期值放入表中。我已经尝试了我能想到的一切,并且可以在没有帮助的情况下在网上找到。我可以成功访问阵列,所以我知道我很接近了,但在搜索“提前期”元数据时,我做了一些错误的事情,但没有起作用。下面是我尝试过的一个例子:

add_action( \'woocommerce_my_account_my_orders_column_order-lead-time\', \'bs_order_lead_time_data\' );
function bs_order_lead_time_data( $order ) {
    foreach( $order->get_items( \'shipping\' ) as $item_id => $shipping_item_obj ){
        $shipping_method_id          = $shipping_item_obj->get_method_id(); // The method ID
        $shipping_method_instance_id = $shipping_item_obj->get_instance_id(); // The instance ID

    $lt1 = wc_get_order_item_meta( $shipping_method_id , \'Lead Time\', $single = true );
    $lt2 = wc_get_order_item_meta( $shipping_method_instance_id , \'Lead Time\', $single = true );
    $lt3 = get_post_meta( $shipping_item_obj, \'Lead Time\', true );

    //echo $shipping_method_id;             //this displays \'free_shipping\' FYI
    //echo $shipping_method_instance_id;    //this displays \'2\' FYI
    //echo $lt1;                            //this one displays nothing...
    //echo $lt2;                            //this one displays nothing...
    //echo $lt3;                            //this one displays nothing...
    echo $shipping_item_obj;                //doing this shows me the data object and the content I need is there.
}

}
使用echo的最后一个示例,下面是我得到的数据数组:

{"id":39,"order_id":2050,"name":"Free shipping","method_title":"Free shipping","method_id":"free_shipping","instance_id":"2","total":"0.00","total_tax":"0","taxes":{"total":[]},"meta_data":[{"id":573,"key":"Items","value":"Test Part × 1"},{"id":574,"key":"Lead Time","value":"2 to 3 weeks"}]}
我肯定我错过了一些简单的东西,但我似乎找不到。任何帮助都将不胜感激。

谢谢

丹尼

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

至少有两种方法可以从定义的元键获取自定义订单项元数据:
1)Since WooCommerce 3 - 使用WC_Data 方法get_meta()
2)The older way - 使用wc_get_order_item_meta() WooCommerce功能

所以你的钩子函数bs_order_lead_time_data() 代码为:

add_action( \'woocommerce_my_account_my_orders_column_order-lead-time\', \'bs_order_lead_time_data\' );
function bs_order_lead_time_data( $order ) {
    foreach ( $order->get_items(\'shipping\') as $item_id => $item ) {
        // Using WC_Data method get_meta() since WooCommerce 3
        echo $item->get_meta(\'Lead Time\');

        // Or the older way (using always the item Id)
        // echo wc_get_order_item_meta( $item_id , \'Lead Time\', true );
    }
}
代码进入函数。活动子主题(或活动主题)的php文件。它应该更有效。

相关推荐

如何让`wp-list-table`显示我在Custom-Post中的`Custom-Fields`

一切都好吗<我需要wp-list-table 也要显示custom-fields 在每个custom-post 我有,但我不知道如何做到这一点,在这幅图中,它显示了带有字段的表格:Title, Author and Publication Date: 我想要的是能够选择custom-fields 将出现,例如以下示例Title, Carta, Naipe, Author, and Date of Publication: