From 02b6ce0ff4881e02ecc018cd6cbe5c25b7a2791b Mon Sep 17 00:00:00 2001 From: Amir Bagheri Date: Thu, 29 Oct 2026 15:20:29 +0330 Subject: [PATCH] feat(import): store primary destination; crawl configured cities Co-Authored-By: Claude Opus 5.5 --- viator-collector/includes/class-vc-cron.php | 18 +++++++++++++----- .../includes/class-vc-importer.php | 1 + viator-collector/includes/class-vc-plugin.php | 1 + .../includes/class-vc-settings.php | 2 +- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/viator-collector/includes/class-vc-cron.php b/viator-collector/includes/class-vc-cron.php index a2bfa3f..b0c6c65 100644 --- a/viator-collector/includes/class-vc-cron.php +++ b/viator-collector/includes/class-vc-cron.php @@ -156,10 +156,14 @@ class VC_Cron { $map = get_transient( 'vc_destination_map' ); - // A destination allowlist (comma-separated IDs) narrows the crawl to a - // focused set; empty means the whole catalogue. - $allow = array_filter( array_map( 'trim', explode( ',', (string) vc_get_option( 'crawl_destinations', '' ) ) ) ); - if ( ! empty( $allow ) ) { + // Cities configured on the Viator Structure screen define the crawl. + // Without any, a destination allowlist (comma-separated IDs) narrows + // the crawl to a focused set; empty means the whole catalogue. + $cities = array_map( 'strval', array_keys( VC_Structure::cities( VC_Structure::get() ) ) ); + $allow = array_filter( array_map( 'trim', explode( ',', (string) vc_get_option( 'crawl_destinations', '' ) ) ) ); + if ( ! empty( $cities ) ) { + $queue = $cities; + } elseif ( ! empty( $allow ) ) { $queue = array_values( array_unique( $allow ) ); } else { $queue = is_array( $map ) ? array_keys( $map ) : array(); @@ -191,7 +195,11 @@ class VC_Cron { ); update_option( 'vc_ingest_in_progress', 1, false ); update_option( 'vc_last_sync_started_at', current_time( 'mysql' ), false ); - VC_Logger::info( sprintf( 'Sync run started — %d destinations queued.', count( $queue ) ) ); + if ( ! empty( $cities ) ) { + VC_Logger::info( sprintf( 'Sync run started from structure — %d cities queued.', count( $queue ) ) ); + } else { + VC_Logger::info( sprintf( 'Sync run started — %d destinations queued.', count( $queue ) ) ); + } return true; } diff --git a/viator-collector/includes/class-vc-importer.php b/viator-collector/includes/class-vc-importer.php index a89e40b..089322a 100644 --- a/viator-collector/includes/class-vc-importer.php +++ b/viator-collector/includes/class-vc-importer.php @@ -368,6 +368,7 @@ class VC_Importer { '_vc_cancellation_policy' => wp_json_encode( vc_first_non_empty( array( vc_array_get( $product, 'cancellationPolicy' ), vc_array_get( $product, 'cancellation' ) ), array() ) ), '_vc_supplier' => sanitize_text_field( $supplier ), '_vc_destinations' => wp_json_encode( vc_array_get( $product, 'destinations', array() ) ), + '_vc_primary_destination' => VC_Structure::primary_destination_id( (array) vc_array_get( $product, 'destinations', array() ) ), '_vc_tags' => wp_json_encode( vc_array_get( $product, 'tags', array() ) ), '_vc_rating' => sanitize_text_field( (string) $rating ), '_vc_review_count' => absint( $review_count ), diff --git a/viator-collector/includes/class-vc-plugin.php b/viator-collector/includes/class-vc-plugin.php index 12e3552..ee4d117 100644 --- a/viator-collector/includes/class-vc-plugin.php +++ b/viator-collector/includes/class-vc-plugin.php @@ -30,6 +30,7 @@ final class VC_Plugin { 'includes/class-vc-logger.php', 'includes/class-vc-cpt.php', 'includes/class-vc-taxonomies.php', + 'includes/class-vc-structure.php', 'includes/class-vc-api.php', 'includes/class-vc-importer.php', 'includes/class-vc-cron.php', diff --git a/viator-collector/includes/class-vc-settings.php b/viator-collector/includes/class-vc-settings.php index 614d45d..9ce82b1 100644 --- a/viator-collector/includes/class-vc-settings.php +++ b/viator-collector/includes/class-vc-settings.php @@ -345,7 +345,7 @@ class VC_Settings { -

+