feat: tour page photos-first layout, mobile booking bar; board 1 fixes

Tour page (boards 2 and 3):
- Replace the blurred 'Welcome to {city}' hero with a breadcrumb and a photo
  gallery (1 large + 2, 'All N photos' opens the lightbox); the H1 title,
  rating with review count and facts follow; booking card stays sticky
- Phones/tablets: swipeable photos, name before price, 2x2 facts, and a
  fixed bottom bar with price + Check availability (vc-tour.css)

Board 1:
- Hide Viator internal tags ('Agent Low Quality Product'...) from the tour
  category, listing filter and activities section (VC_Tags, tested)
- Listings: run the query filter late and set posts_per_archive_page so
  pages show 12 tours as the count says
- Footer columns without a menu show default links (quick links, structure
  cities, contact/about/faq) instead of empty headings

Plugin 1.9.5, theme 1.0.13.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-29 21:01:13 +03:30
parent 2f1ecd99b4
commit de9814cf3d
15 changed files with 367 additions and 57 deletions

View File

@@ -8,6 +8,7 @@
define( 'ABSPATH', __DIR__ . '/' );
require_once dirname( __DIR__ ) . '/includes/class-vc-structure.php';
require_once dirname( __DIR__ ) . '/includes/class-vc-tags.php';
function vc_assert_same( $expected, $actual, $msg = '' ) {
if ( $expected !== $actual ) {

View File

@@ -0,0 +1,28 @@
<?php
/**
* VC_Tags unit tests: Viator's internal tags never reach visitors.
*/
function test_internal_tag_agent_low_quality() {
vc_assert_same( true, VC_Tags::is_internal( 'Agent Low Quality Product' ) );
}
function test_internal_tag_variants() {
vc_assert_same( true, VC_Tags::is_internal( 'Low Quality Supplier' ) );
vc_assert_same( true, VC_Tags::is_internal( 'agent quality product' ) );
}
function test_public_tags_kept() {
vc_assert_same( false, VC_Tags::is_internal( 'Audio Guides' ) );
vc_assert_same( false, VC_Tags::is_internal( 'Excellent Quality' ) );
vc_assert_same( false, VC_Tags::is_internal( 'Hop-on Hop-off Tours' ) );
}
function test_public_terms_filters_objects() {
$terms = array(
(object) array( 'name' => 'Agent Low Quality Product' ),
(object) array( 'name' => 'Audio Guides' ),
(object) array( 'name' => 'Bus Tours' ),
);
vc_assert_same( array( 'Audio Guides', 'Bus Tours' ), array_column( VC_Tags::public_terms( $terms ), 'name' ) );
}