根据订单准备日期还剩多少时间,更改Woocommerce中的订单顺序

时间:2020-05-29 16:31:34

标签: wordpress woocommerce hook-woocommerce

我需要在Woocommerce管理页面中更改订单顺序。我有一些带有日期/时间的自定义列,根据此数据,我将更改订单的顺序。它不是严格的日期/时间过滤(从最早到最新,反之亦然)。

决定性的因素是订单应准备就绪的日期还剩多少时间。就我而言,是一个小时。此时,该订单应位于列表的顶部,而不管是否已创建(例如,一周前)。

示例:

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)还剩一个小时才能完成Jane的订单

+--------------------------------+------------+---------+--------------------+-------+
| 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)还剩两个小时才能完成Jane的订单

+--------------------------------+------------+---------+--------------------+-------+
| 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    |
+--------------------------------+------------+---------+--------------------+-------+

能否请您提示我如何开始?我应该在子主题function.php中使用哪些钩子?

编辑: 添加新列的示例代码:

// 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 :(得分:0)

好的。我这样解决了。我创建了一个自定义的“优先级”列,其中包含一个数值,该数值确定订单在列表中的位置。然后,我根据此自定义列对订单进行排序,从最小(最高优先级)到最大。每当更新管理员“订单列表”页面时,都会根据交货时间选择适当的优先级。我只对未完成的订单感兴趣,因此处理的内容不多。

我仍然想听听是否有人提出了更好的解决方案。