Показать детали заказа в новом столбце в моей учетной записи / таблице заказов

#wordpress #woocommerce #orders

#wordpress #woocommerce #заказы

Вопрос:

В 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:

woocommerce_my_account_my_orders_columns Фильтр устарел с WooCommerce 2.6.0. Поэтому, хотя он все еще функционирует, вы должны использовать woocommerce_account_orders_columns фильтр для добавления дополнительного столбца.

Чтобы заполнить столбец своими данными, вы можете использовать woocommerce_my_account_my_orders_column_ действие, которое ожидает, что вы добавите идентификатор столбца вашего пользовательского столбца. Так что в вашем случае это было бы 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 : '-'; 
}
  

Комментарии:

1. Привет, спасибо за ответ. Я думаю, что я не описал четко, чего я хотел. Я не программист 🙂 Я нашел этот код в Интернете, и я хотел его переписать. Итак, что я хочу, показать детали заказа (из get_formatted_meta_data или wc_display_item_meta) в столбце «Моя учетная запись / заказ». Спасибо, если кто-нибудь может помочь.

2. Вы хотите отобразить всю мету всех ваших товаров в заказе в этом столбце?

3. Или вы просто хотите показать продукты в заказе?

4. Да, я хочу отобразить все метаданные заказа в этом столбце.

5. Конечно, см. Обновленный ответ. Пожалуйста, обратите внимание, что это вся мета элемента. Не мета заказа.