我试图显示一些自定义元数据,这些元数据和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"}]}
我肯定我错过了一些简单的东西,但我似乎找不到。任何帮助都将不胜感激。
谢谢
丹尼