feat(admin): clear closed orders and bulk content-pay edit
Add zibll-style clear/delete for closed orders and bulk/quick fields for post pay_type, modo, prices, and virtual_sales.
This commit is contained in:
@@ -29,6 +29,8 @@ class AKSRT_Admin_Pay_Orders {
|
||||
}
|
||||
add_action('admin_post_aksrt_pay_update_order_status', [$this, 'handle_update_order_status']);
|
||||
add_action('admin_post_aksrt_pay_update_order_note', [$this, 'handle_update_order_note']);
|
||||
add_action('admin_post_aksrt_pay_clear_closed_orders', [$this, 'handle_clear_closed_orders']);
|
||||
add_action('admin_post_aksrt_pay_delete_order', [$this, 'handle_delete_order']);
|
||||
}
|
||||
|
||||
public function render_orders_page(): void {
|
||||
@@ -178,6 +180,16 @@ class AKSRT_Admin_Pay_Orders {
|
||||
}
|
||||
echo '</form>';
|
||||
|
||||
// Hygiene actions (zibll clear_order / delete).
|
||||
echo '<p style="margin:8px 0 12px;">';
|
||||
echo '<form method="post" action="' . esc_url(admin_url('admin-post.php')) . '" style="display:inline;" onsubmit="return confirm(\'' . esc_js(__('将删除 14 天前所有已关闭/已过期订单,不可恢复。确认清理?', 'aksrt')) . '\');">';
|
||||
echo '<input type="hidden" name="action" value="aksrt_pay_clear_closed_orders" />';
|
||||
echo '<input type="hidden" name="days" value="14" />';
|
||||
wp_nonce_field('aksrt_pay_clear_closed_orders');
|
||||
submit_button(__('清理 14 天前关闭订单', 'aksrt'), 'secondary', '', false);
|
||||
echo '</form>';
|
||||
echo '</p>';
|
||||
|
||||
echo '<table class="wp-list-table widefat fixed striped">';
|
||||
echo '<thead><tr>';
|
||||
echo '<th>' . esc_html__('订单号', 'aksrt') . '</th>';
|
||||
@@ -226,6 +238,14 @@ class AKSRT_Admin_Pay_Orders {
|
||||
echo '</select>';
|
||||
submit_button(__('更新', 'aksrt'), 'small', '', false);
|
||||
echo '</form>';
|
||||
if (in_array($status_key, ['cancelled', 'expired'], true)) {
|
||||
echo '<form method="post" action="' . esc_url(admin_url('admin-post.php')) . '" style="display:inline;" onsubmit="return confirm(\'' . esc_js(__('确认永久删除此订单?不可恢复。', 'aksrt')) . '\');">';
|
||||
echo '<input type="hidden" name="action" value="aksrt_pay_delete_order" />';
|
||||
echo '<input type="hidden" name="order_number" value="' . esc_attr($order_number) . '" />';
|
||||
wp_nonce_field('aksrt_pay_delete_order_' . $order_number);
|
||||
submit_button(__('删除', 'aksrt'), 'small', '', false);
|
||||
echo '</form>';
|
||||
}
|
||||
echo '</td>';
|
||||
echo '</tr>';
|
||||
}
|
||||
@@ -455,7 +475,43 @@ class AKSRT_Admin_Pay_Orders {
|
||||
exit;
|
||||
}
|
||||
|
||||
public function handle_clear_closed_orders(): void {
|
||||
if (!current_user_can(self::CAPABILITY)) {
|
||||
wp_die(esc_html__('权限不足', 'aksrt'));
|
||||
}
|
||||
check_admin_referer('aksrt_pay_clear_closed_orders');
|
||||
$days = isset($_POST['days']) ? max(1, min(3650, (int) $_POST['days'])) : 14;
|
||||
$deleted = 0;
|
||||
if (class_exists('AKSRT_Order_Repository')) {
|
||||
$deleted = AKSRT_Order_Repository::get_instance()->clear_closed_orders($days);
|
||||
}
|
||||
wp_safe_redirect($this->page_url('aksrt_orders', [
|
||||
'aksrt_pay_msg' => $deleted > 0 ? 'orders_cleared' : 'orders_clear_empty',
|
||||
'cleared' => $deleted,
|
||||
]));
|
||||
exit;
|
||||
}
|
||||
|
||||
public function handle_delete_order(): void {
|
||||
if (!current_user_can(self::CAPABILITY)) {
|
||||
wp_die(esc_html__('权限不足', 'aksrt'));
|
||||
}
|
||||
$order_number = isset($_POST['order_number']) ? sanitize_text_field((string) wp_unslash($_POST['order_number'])) : '';
|
||||
check_admin_referer('aksrt_pay_delete_order_' . $order_number);
|
||||
$ok = false;
|
||||
if ($order_number !== '' && class_exists('AKSRT_Order_Repository')) {
|
||||
$order = AKSRT_Order_Repository::get_instance()->get($order_number);
|
||||
$status = is_array($order) ? (string) ($order['status'] ?? '') : '';
|
||||
// Only allow hard-delete of closed/expired rows (safety).
|
||||
if (in_array($status, ['cancelled', 'expired'], true)) {
|
||||
$ok = AKSRT_Order_Repository::get_instance()->delete_order($order_number);
|
||||
}
|
||||
}
|
||||
wp_safe_redirect($this->page_url('aksrt_orders', [
|
||||
'aksrt_pay_msg' => $ok ? 'order_deleted' : 'order_delete_failed',
|
||||
]));
|
||||
exit;
|
||||
}
|
||||
|
||||
private function shipping_status_options(bool $include_all = false): array {
|
||||
if (class_exists('AKSRT_Admin_Pay_Shipping')) {
|
||||
@@ -544,6 +600,14 @@ class AKSRT_Admin_Pay_Orders {
|
||||
'order_failed' => __('订单状态更新失败。', 'aksrt'),
|
||||
'order_note_updated' => __('订单备注已保存。', 'aksrt'),
|
||||
'order_note_failed' => __('订单备注保存失败。', 'aksrt'),
|
||||
'orders_cleared' => sprintf(
|
||||
/* translators: %d deleted count */
|
||||
__('已清理 %d 条关闭订单。', 'aksrt'),
|
||||
max(0, (int) ($_GET['cleared'] ?? 0))
|
||||
),
|
||||
'orders_clear_empty' => __('没有可清理的关闭订单。', 'aksrt'),
|
||||
'order_deleted' => __('订单已删除。', 'aksrt'),
|
||||
'order_delete_failed' => __('订单删除失败(仅允许删除已关闭/过期订单)。', 'aksrt'),
|
||||
'shipping_updated' => __('物流状态已更新。', 'aksrt'),
|
||||
'shipping_failed' => __('物流状态更新失败。', 'aksrt'),
|
||||
'shipping_created' => __('发货记录已创建。', 'aksrt'),
|
||||
|
||||
Reference in New Issue
Block a user