Измените порядок заказов в Woocommerce в зависимости от того, сколько времени осталось до даты, когда заказ должен быть готов - PullRequest
2 голосов
/ 29 мая 2020

Мне нужно изменить порядок заказов на странице администратора Woocommerce. У меня есть настраиваемый столбец с датой / временем, и на основе этих данных я изменю порядок заказов. Это не строгая фильтрация по дате / времени (от самых старых к новейшим и наоборот).

Решающим фактором является то, сколько времени осталось до даты, когда заказ должен быть готов. В моем случае это один час. В этот момент заказ должен быть вверху списка, независимо от того, был ли он создан, например неделя go.

Примеры:

1) Порядок по умолчанию (самые новые вверху, самые старые внизу)

+--------------------------------+------------+---------+--------------------+-------+
| ACTUAL DATE: 28.5.2020 - 15:00 |            |         |                    |       |
+--------------------------------+------------+---------+--------------------+-------+
| ORDER                          | DATE       | STATUS  | DATE/TIME (custom) | PRICE |
| Frank                          | 28.05.2020 | PENDING | -                  | 100   |
| Lucy                           | 27.05.2020 | DONE    | -                  | 50    |
| Thomas                         | 27.05.2020 | DONE    | -                  | 80    |
| Jane                           | 26.05.2020 | PENDING | 28.5.2020 - 16:00  | 90    |
+--------------------------------+------------+---------+--------------------+-------+

2) Остался один час для выполнения заказа Джейн

+--------------------------------+------------+---------+--------------------+-------+
| ACTUAL DATE: 28.5.2020 - 15:00 |            |         |                    |       |
+--------------------------------+------------+---------+--------------------+-------+
| ORDER                          | DATE       | STATUS  | DATE/TIME (custom) | PRICE |
| Jane                           | 26.05.2020 | PENDING | 28.5.2020 - 16:00  | 90    |
| Frank                          | 28.05.2020 | PENDING | -                  | 100   |
| Lucy                           | 27.05.2020 | DONE    | -                  | 50    |
| Thomas                         | 27.05.2020 | DONE    | -                  | 80    |
+--------------------------------+------------+---------+--------------------+-------+

3) На выполнение заказа Джейн осталось два часа

+--------------------------------+------------+---------+--------------------+-------+
| ACTUAL DATE: 28.5.2020 - 14:00 |            |         |                    |       |
+--------------------------------+------------+---------+--------------------+-------+
| ORDER                          | DATE       | STATUS  | DATE/TIME (custom) | PRICE |
| Frank                          | 28.05.2020 | PENDING | -                  | 100   |
| Lucy                           | 27.05.2020 | DONE    | -                  | 50    |
| Thomas                         | 27.05.2020 | DONE    | -                  | 80    |
| Jane                           | 26.05.2020 | PENDING | 28.5.2020 - 16:00  | 90    |
+--------------------------------+------------+---------+--------------------+-------+

Не могли бы вы подсказать, с чего начать? Какие хуки в моей функции дочерней темы. php мне следует использовать?

EDIT: Пример кода для добавления нового столбца:

// Add column
add_filter( 'manage_edit-shop_order_columns', 'custom_delivery_time' );
function custom_delivery_time( $columns ) {
    $new_columns = ( is_array( $columns ) ) ? $columns : array();
    unset( $new_columns[ 'order_actions' ] );

    $new_columns['custom_datetime'] = 'Date / Time';
    $new_columns[ 'order_actions' ] = $columns[ 'order_actions' ];

    return $new_columns;
}

// Change order of columns, populate
add_action( 'manage_shop_order_posts_custom_column', 'custom_woo_admin_value', 2 );
function custom_woo_admin_value( $column ) {
    global $post, $the_order;

    if ( empty( $the_order ) || $the_order->get_id() != $post->ID ) {
        $the_order = wc_get_order( $post->ID );
    }

    if ( $column == 'custom_datetime' ) {
        $custom_datetime = $the_order->get_custom_datetime();
        echo empty($custom_datetime) ? '' : $custom_datetime;
    }
}

1 Ответ

0 голосов
/ 02 июня 2020

Хорошо. Я решил это так. Я создал настраиваемый столбец «приоритет», который содержит числовое значение c, определяющее, насколько высоко в списке должен быть порядок. Затем я сортирую заказы в соответствии с этим настраиваемым столбцом от наименьшего (высший приоритет) до наибольшего. Каждый раз, когда страница администратора "список заказов" обновляется, соответствующий приоритет выбирается в соответствии со временем доставки. Меня интересуют только незавершенные заказы, поэтому обрабатывать особо нечего.

Я все равно хотел бы услышать, найдет ли кто-нибудь лучшее решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...