在WooCommerce中,我想向“我的帐户”订单表中添加一个新列,并显示订单详细信息。
我有这段代码,它添加了该列,但是没有显示值(例如get_formatted_meta_data)。
任何人都可以帮助重写代码以使其正常工作吗?
function wc_add_my_account_orders_column( $columns ) {
$new_columns = array();
foreach ( $columns as $key => $name ) {
$new_columns[ $key ] = $name;
if ( 'order-status' === $key ) {
$new_columns['order-details'] = __( 'Order details', 'textdomain' );
}
}
return $new_columns;
}
add_filter( 'woocommerce_my_account_my_orders_columns', 'wc_add_my_account_orders_column' );
function wc_my_orders_order_details_column( $order ) {
$order_details = get_post_meta( $order->get_id(), 'order_details', true );
echo ! empty( $order_details ) ? $order_details : '–';
}
add_action( 'woocommerce_my_account_my_orders_column_order_details', 'wc_my_orders_order_details_column' );
答案 0 :(得分:0)
自WooCommerce 2.6.0起,woocommerce_my_account_my_orders_columns
过滤器已被弃用。因此,尽管它仍然可以运行,但是您应该使用woocommerce_account_orders_columns
过滤器来添加其他列。
要用数据填充列,可以使用woocommerce_my_account_my_orders_column_
操作,该操作希望您附加自定义列的列ID。因此,在您的情况下为order-details
。在您的示例中,您使用了order_details
(带有下划线而不是连字符)。这就是为什么您的数据不显示的原因。
最好还是通过内部WooCommerce getter函数get_meta()
而不是使用get_post_meta()
检索订单元数据。
add_filter( 'woocommerce_account_orders_columns', 'wc_add_my_account_orders_column', 10, 1 );
function wc_add_my_account_orders_column( $columns ) {
$new_columns = array();
foreach ( $columns as $key => $name ) {
$new_columns[ $key ] = $name;
if ( 'order-status' === $key ) {
$new_columns['order-details'] = __( 'Order details', 'textdomain' );
}
}
return $new_columns;
}
add_action( 'woocommerce_my_account_my_orders_column_order-details', 'wc_my_orders_order_details_column', 10, 1 );
function wc_my_orders_order_details_column( $order ) {
$item_meta = '';
foreach ( $order->get_items() as $item ) {
$item_meta .= wc_display_item_meta( $item, array( 'echo' => false ) );
}
echo !empty( $item_meta ) ? $item_meta : '-';
}