在我的帐户/订单表的新列中显示订单详细信息

时间:2020-10-29 13:34:43

标签: wordpress woocommerce orders

在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' );  

1 个答案:

答案 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 : '-'; 
}