#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. Конечно, см. Обновленный ответ. Пожалуйста, обратите внимание, что это вся мета элемента. Не мета заказа.