Сортировка даты завершения в списке заказов WooCommerce (панель администратора)Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Сортировка даты завершения в списке заказов WooCommerce (панель администратора)

Сообщение Anonymous »

Я добавил новый столбец с датой завершения на страницу списка заказов woocommerce, используя код здесь. В новом столбце кнопки сортировки (стрелки вверх/вниз) отображаются правильно, но при нажатии создается впечатление, что сортировка выполняется по идентификатору заказа, а не по дате завершения, и всегда сортируется только в одну сторону по ASC, независимо от того, сколько раз я нажимаю.

Код: Выделить всё

// 1
add_filter( 'woocommerce_shop_order_list_table_columns', function ( $columns ) {
if ( isset( $columns['order_date'] ) ) {
unset( $columns['order_date'] );
}
$new = [];
foreach ( $columns as $key => $label ) {
$new[$key] = $label;
if ( 'order_number' === $key ) {
$new['completed_date'] = __( 'Completed', 'woocommerce' );
}
}
return $new;
}, 20 );

// 2
add_action( 'woocommerce_shop_order_list_table_custom_column', function( $column, $order ) {
if ( 'completed_date' !== $column ) {
return;
}
if ( ! is_a( $order, 'WC_Order' ) ) return;
$date = $order->get_date_completed();
echo $date ? esc_html( wc_format_datetime( $date, get_option('date_format').' '.get_option('time_format') ) ) : '—';
}, 10, 2 );

// 3
add_filter( 'woocommerce_shop_order_list_table_sortable_columns', function( $columns ) {
$columns['completed_date'] = 'completed_date';
return $columns;
} );

// 4
add_action( 'pre_get_posts', function( $query ) {
global $pagenow, $typenow;
if ( ! is_admin() || 'edit.php' !== $pagenow || 'shop_order' !== $typenow || ! $query->is_main_query() ) {
return;
}
$orderby = $query->get( 'orderby' );
if ( 'completed_date' === $orderby ) {
$query->set( 'meta_key', '_date_completed' );
$query->set( 'orderby', 'meta_value' );
$query->set( 'meta_type', 'DATETIME' );
}
} );
Обратите внимание: я также пробовал код ниже для части 4, но он тоже не сработал

Код: Выделить всё

// 4 (2)
function action_parse_query( $query ) {
global $pagenow;
$query_vars = &$query->query_vars;
if ( is_admin() && $query->is_main_query() && $pagenow == 'edit.php' && $query_vars['post_type'] == 'shop_order' ) {
$query->set( 'orderby', 'completed_date' );
$query->set( 'order', 'ASC' );
}
}
add_action( 'parse_query', 'action_parse_query', 10, 1 );

Пожалуйста, помогите, если нужно откорректировать код для его правильной сортировки. Большое спасибо.

Подробнее здесь: https://stackoverflow.com/questions/797 ... -dashboard
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»