我需要在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;
}
}
答案 0 :(得分:0)
好的。我这样解决了。我创建了一个自定义的“优先级”列,其中包含一个数值,该数值确定订单在列表中的位置。然后,我根据此自定义列对订单进行排序,从最小(最高优先级)到最大。每当更新管理员“订单列表”页面时,都会根据交货时间选择适当的优先级。我只对未完成的订单感兴趣,因此处理的内容不多。
我仍然想听听是否有人提出了更好的解决方案。