From b0e302be158b7313e2a7f988f8607d72f0edc526 Mon Sep 17 00:00:00 2001 From: amir Date: Wed, 16 Sep 2026 07:48:11 +0330 Subject: [PATCH] perf: make the tours archive query index-only by default The archive attached an always-on _vc_featured NOT EXISTS join and a _vc_review_count join (plus SQL_CALC_FOUND_ROWS) to every request, which made /tours/ crawl/time out over a ~70k-tour catalogue. Default sort now orders by post date with no postmeta joins; price/rating sorts add a single meta_key join on demand; meta_query is only attached when a filter is active. Bump 1.8.4. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01J4hNL1PSHxXbu94SCenpKj --- viator-collector.zip | Bin 155424 -> 155419 bytes .../includes/class-vc-display.php | 55 ++++++++---------- viator-collector/viator-collector.php | 4 +- 3 files changed, 26 insertions(+), 33 deletions(-) diff --git a/viator-collector.zip b/viator-collector.zip index fa293a32c4d4a0800b80db9b0ede3cb565b47a74..5d0bba9fc1d16635ae4c74363b0385d3c75dab39 100644 GIT binary patch delta 8443 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 diff --git a/viator-collector/includes/class-vc-display.php b/viator-collector/includes/class-vc-display.php index da13687..5fca79d 100644 --- a/viator-collector/includes/class-vc-display.php +++ b/viator-collector/includes/class-vc-display.php @@ -289,7 +289,7 @@ class VC_Display { */ public static function build_query_vars( array $base_tax = array() ) { $f = self::get_filter_state(); - $vars = array( 'posts_per_page' => 12 ); + $vars = array( 'posts_per_page' => 12, 'ignore_sticky_posts' => true ); if ( '' !== $f['q'] ) { $vars['s'] = $f['q']; @@ -346,46 +346,39 @@ class VC_Display { if ( $f['sellout'] ) { $meta_query[] = array( 'key' => '_vc_flags', 'value' => 'LIKELY_TO_SELL_OUT', 'compare' => 'LIKE' ); } - // Featured tours always sort first, whatever the chosen sort. OR/NOT - // EXISTS keeps non-featured tours in the results too. - $meta_query['vc_featured'] = array( - 'relation' => 'OR', - array( 'key' => '_vc_featured', 'value' => '1', 'compare' => '=' ), - array( 'key' => '_vc_featured', 'compare' => 'NOT EXISTS' ), - ); - - $orderby = array( 'vc_featured' => 'DESC' ); - + // Sort. Performance: the default (newest) orders by post date only — no + // postmeta JOIN and no featured/review tiebreak — so the unfiltered + // archive stays fast even with a very large catalogue (tens of thousands + // of tours). Price/rating sorts add a single meta_key JOIN, on demand. switch ( $f['sort'] ) { case 'price_asc': - $meta_query['vc_price'] = array( 'key' => '_vc_price_from', 'type' => 'DECIMAL', 'compare' => 'EXISTS' ); - $orderby['vc_price'] = 'ASC'; + $vars['meta_key'] = '_vc_price_from'; + $vars['orderby'] = 'meta_value_num'; + $vars['order'] = 'ASC'; break; case 'price_desc': - $meta_query['vc_price'] = array( 'key' => '_vc_price_from', 'type' => 'DECIMAL', 'compare' => 'EXISTS' ); - $orderby['vc_price'] = 'DESC'; + $vars['meta_key'] = '_vc_price_from'; + $vars['orderby'] = 'meta_value_num'; + $vars['order'] = 'DESC'; break; case 'rating': - $meta_query['vc_rating_sort'] = array( 'key' => '_vc_rating', 'type' => 'DECIMAL', 'compare' => 'EXISTS' ); - $orderby['vc_rating_sort'] = 'DESC'; + $vars['meta_key'] = '_vc_rating'; + $vars['orderby'] = 'meta_value_num'; + $vars['order'] = 'DESC'; break; + default: + $vars['orderby'] = 'date'; + $vars['order'] = 'DESC'; } - // Keep the selected sort as the primary order, then prefer the more - // established tour when two products otherwise rank the same. - $meta_query['vc_reviews_sort'] = array( - 'key' => '_vc_review_count', - 'type' => 'NUMERIC', - 'compare' => 'EXISTS', - ); - $orderby['vc_reviews_sort'] = 'DESC'; - $orderby['date'] = 'DESC'; // stable tiebreak - - if ( count( $meta_query ) > 1 ) { - $meta_query['relation'] = 'AND'; + // Only attach a meta_query when a filter is actually active, so the plain + // archive query carries no postmeta joins at all. + if ( ! empty( $meta_query ) ) { + if ( count( $meta_query ) > 1 ) { + $meta_query['relation'] = 'AND'; + } + $vars['meta_query'] = $meta_query; } - $vars['meta_query'] = $meta_query; - $vars['orderby'] = $orderby; return $vars; } diff --git a/viator-collector/viator-collector.php b/viator-collector/viator-collector.php index 0a6d035..939b2a9 100644 --- a/viator-collector/viator-collector.php +++ b/viator-collector/viator-collector.php @@ -4,13 +4,13 @@ defined('ABSPATH') || exit; /** * Plugin Name: Viator Collector * Description: Import Viator tours using the Viator Partner API and display them with native WordPress post types, templates, and shortcodes. - * Version: 1.8.3 + * Version: 1.8.4 * Author: Amir Bagheri * License: GPL-2.0-or-later * Text Domain: viator-collector */ -define('VC_VERSION', '1.8.3'); +define('VC_VERSION', '1.8.4'); define('VC_PLUGIN_FILE', __FILE__); define('VC_PLUGIN_DIR', plugin_dir_path(__FILE__)); define('VC_PLUGIN_URL', plugin_dir_url(__FILE__));