| @@ -241,9 +241,17 @@ | ||
| 241 | 241 | $this->ensure_default_list(self::DEFAULT_WISHLIST_ID); |
| 242 | 242 | $lists = $wpdb->get_results("SELECT * FROM {$lists_table} WHERE {$where} ORDER BY created_at DESC"); |
| 243 | 243 | } |
| 244 | 244 | |
| 245 | - return $lists ?: []; | |
| 245 | + $unique = []; | |
| 246 | + foreach ($lists ?: [] as $list) { | |
| 247 | + $key = (string) ($list->slug ?: $list->id); | |
| 248 | + if (!isset($unique[$key])) { | |
| 249 | + $unique[$key] = $list; | |
| 250 | + } | |
| 251 | + } | |
| 252 | + | |
| 253 | + return array_values($unique); | |
| 246 | 254 | } |
| 247 | 255 | |
| 248 | 256 | /** |
| 249 | 257 | * Create a new wishlist record. |
| @@ -609,16 +617,25 @@ | ||
| 609 | 617 | global $wpdb; |
| 610 | 618 | |
| 611 | 619 | $lists_table = Wishlist_DB::get_lists_table(); |
| 612 | 620 | |
| 613 | - $existing_row = $wpdb->get_var( | |
| 614 | - $wpdb->prepare( | |
| 615 | - "SELECT id FROM {$lists_table} WHERE (user_id = %d OR session_key = %s) AND slug = %s LIMIT 1", | |
| 616 | - $this->user_id, | |
| 617 | - $this->session_key, | |
| 618 | - $wishlist_id | |
| 619 | - ) | |
| 620 | - ); | |
| 621 | + if ($this->user_id > 0) { | |
| 622 | + $existing_row = $wpdb->get_var( | |
| 623 | + $wpdb->prepare( | |
| 624 | + "SELECT id FROM {$lists_table} WHERE user_id = %d AND slug = %s LIMIT 1", | |
| 625 | + $this->user_id, | |
| 626 | + $wishlist_id | |
| 627 | + ) | |
| 628 | + ); | |
| 629 | + } else { | |
| 630 | + $existing_row = $wpdb->get_var( | |
| 631 | + $wpdb->prepare( | |
| 632 | + "SELECT id FROM {$lists_table} WHERE user_id = 0 AND session_key = %s AND slug = %s LIMIT 1", | |
| 633 | + $this->session_key, | |
| 634 | + $wishlist_id | |
| 635 | + ) | |
| 636 | + ); | |
| 637 | + } | |
| 621 | 638 | |
| 622 | 639 | if ($existing_row) { |
| 623 | 640 | return; |
| 624 | 641 | } |