feat(orders): redesign user order center

This commit is contained in:
2026-08-03 12:54:58 +08:00
parent 41506eeb3d
commit 26d307056e
10 changed files with 928 additions and 3652 deletions
+32 -8
View File
@@ -108,10 +108,16 @@ trait OrderRepositoryCore {
$params[] = $user_id;
}
$status = sanitize_key((string) ($args['status'] ?? ''));
if ($status !== '') {
$where[] = 'status = %s';
$params[] = $status;
$statuses = array_values(array_filter(array_map('sanitize_key', (array) ($args['status_in'] ?? []))));
if ($statuses !== []) {
$where[] = 'status IN (' . implode(', ', array_fill(0, count($statuses), '%s')) . ')';
array_push($params, ...$statuses);
} else {
$status = sanitize_key((string) ($args['status'] ?? ''));
if ($status !== '') {
$where[] = 'status = %s';
$params[] = $status;
}
}
$product_type = sanitize_key((string) ($args['product_type'] ?? ''));
@@ -120,6 +126,12 @@ trait OrderRepositoryCore {
$params[] = $product_type;
}
$order_number_prefix = strtoupper(preg_replace('/[^A-Za-z0-9_-]/', '', (string) ($args['order_number_prefix'] ?? '')) ?? '');
if ($order_number_prefix !== '') {
$where[] = 'order_number LIKE %s';
$params[] = $wpdb->esc_like($order_number_prefix) . '%';
}
$limit = max(1, min(100, (int) ($args['limit'] ?? 20)));
$offset = max(0, (int) ($args['offset'] ?? 0));
@@ -166,10 +178,16 @@ trait OrderRepositoryCore {
$where = ['user_id = %d'];
$params = [$user_id];
$status = sanitize_key((string) ($args['status'] ?? ''));
if ($status !== '') {
$where[] = 'status = %s';
$params[] = $status;
$statuses = array_values(array_filter(array_map('sanitize_key', (array) ($args['status_in'] ?? []))));
if ($statuses !== []) {
$where[] = 'status IN (' . implode(', ', array_fill(0, count($statuses), '%s')) . ')';
array_push($params, ...$statuses);
} else {
$status = sanitize_key((string) ($args['status'] ?? ''));
if ($status !== '') {
$where[] = 'status = %s';
$params[] = $status;
}
}
$product_type = sanitize_key((string) ($args['product_type'] ?? ''));
@@ -178,6 +196,12 @@ trait OrderRepositoryCore {
$params[] = $product_type;
}
$order_number_prefix = strtoupper(preg_replace('/[^A-Za-z0-9_-]/', '', (string) ($args['order_number_prefix'] ?? '')) ?? '');
if ($order_number_prefix !== '') {
$where[] = 'order_number LIKE %s';
$params[] = $wpdb->esc_like($order_number_prefix) . '%';
}
$where_sql = 'WHERE ' . implode(' AND ', $where);
$sql = "SELECT COUNT(*) FROM {$this->table()} {$where_sql}";