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>
127 lines
5.3 KiB
PHP
127 lines
5.3 KiB
PHP
<?php
|
|
/**
|
|
* Custom site footer — "Hop On Hop Off" design. Rendered on the `astra_footer`
|
|
* hook in place of Astra's default footer.
|
|
*/
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
$hoho_about = apply_filters(
|
|
'hoho_footer_about',
|
|
get_bloginfo( 'description' ) ? get_bloginfo( 'description' ) : __( 'Open-top hop on, hop off bus tours — explore the city at your own pace, with flexible tickets and free cancellation.', 'hoponhopoff' )
|
|
);
|
|
|
|
$hoho_socials = hoho_socials();
|
|
|
|
/**
|
|
* Default links for a footer column that has no menu assigned, so the footer
|
|
* is never three empty headings. Pages are linked only if they exist.
|
|
*/
|
|
$hoho_footer_defaults = function ( $location ) {
|
|
$page = function ( $slugs, $label ) {
|
|
foreach ( (array) $slugs as $slug ) {
|
|
$p = get_page_by_path( $slug );
|
|
if ( $p && 'publish' === $p->post_status ) {
|
|
return array( $label, get_permalink( $p ) );
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
$links = array();
|
|
if ( 'hoho_quick' === $location ) {
|
|
$links[] = array( __( 'Home', 'hoponhopoff' ), home_url( '/' ) );
|
|
if ( get_post_type_archive_link( 'viator_tour' ) ) {
|
|
$links[] = array( __( 'All Tours', 'hoponhopoff' ), get_post_type_archive_link( 'viator_tour' ) );
|
|
}
|
|
$links[] = get_option( 'page_for_posts' ) ? array( __( 'Blog', 'hoponhopoff' ), get_permalink( get_option( 'page_for_posts' ) ) ) : $page( array( 'blogs', 'blog' ), __( 'Blog', 'hoponhopoff' ) );
|
|
} elseif ( 'hoho_tours' === $location && class_exists( 'VC_Structure' ) ) {
|
|
// The first cities from Settings → Viator Structure.
|
|
foreach ( array_slice( VC_Structure::cities( VC_Structure::get() ), 0, 6 ) as $city ) {
|
|
$links[] = array( $city['name'], home_url( '/' . $city['slug'] . '/' ) );
|
|
}
|
|
} elseif ( 'hoho_account' === $location ) {
|
|
$links[] = $page( array( 'contact-us', 'contact' ), __( 'Contact Us', 'hoponhopoff' ) );
|
|
$links[] = $page( array( 'about-us', 'about' ), __( 'About Us', 'hoponhopoff' ) );
|
|
$links[] = $page( array( 'faq', 'faqs' ), __( 'FAQ', 'hoponhopoff' ) );
|
|
}
|
|
$links = array_filter( $links );
|
|
if ( ! $links ) {
|
|
return;
|
|
}
|
|
echo '<ul>';
|
|
foreach ( $links as $link ) {
|
|
echo '<li><a href="' . esc_url( $link[1] ) . '">' . esc_html( $link[0] ) . '</a></li>';
|
|
}
|
|
echo '</ul>';
|
|
};
|
|
|
|
$hoho_footer_col = function ( $location ) use ( $hoho_footer_defaults ) {
|
|
if ( ! has_nav_menu( $location ) ) {
|
|
$hoho_footer_defaults( $location );
|
|
return;
|
|
}
|
|
wp_nav_menu(
|
|
array(
|
|
'theme_location' => $location,
|
|
'container' => false,
|
|
'items_wrap' => '<ul>%3$s</ul>',
|
|
'depth' => 1,
|
|
'fallback_cb' => false,
|
|
)
|
|
);
|
|
};
|
|
?>
|
|
<div class="hoho">
|
|
<footer class="footer" id="footer">
|
|
<a class="ring-badge ring-badge--top" href="#top" aria-label="<?php echo esc_attr__( 'Back to top', 'hoponhopoff' ); ?>">
|
|
<svg class="ring-badge__ring" viewBox="0 0 100 100" aria-hidden="true">
|
|
<text class="ring-badge__text" text-anchor="middle">
|
|
<textPath href="#ringPathScroll" startOffset="25%"><?php echo esc_html__( 'BACK TO TOP', 'hoponhopoff' ); ?></textPath>
|
|
<textPath href="#ringPathScroll" startOffset="75%"><?php echo esc_html__( 'BACK TO TOP', 'hoponhopoff' ); ?></textPath>
|
|
</text>
|
|
</svg>
|
|
<span class="ring-badge__dot"><svg class="icon" aria-hidden="true"><use href="#i-arrow-up"></use></svg></span>
|
|
</a>
|
|
|
|
<div class="container footer__inner">
|
|
<div class="footer__brand">
|
|
<span class="footer__logo"><?php require get_stylesheet_directory() . '/inc/logo.php'; ?></span>
|
|
<p class="footer__about"><?php echo esc_html( $hoho_about ); ?></p>
|
|
</div>
|
|
|
|
<nav class="footer__cols" aria-label="<?php echo esc_attr__( 'Footer', 'hoponhopoff' ); ?>">
|
|
<div class="footer__col">
|
|
<h2 class="footer__ct"><?php echo esc_html__( 'Quick Access', 'hoponhopoff' ); ?></h2>
|
|
<?php $hoho_footer_col( 'hoho_quick' ); ?>
|
|
</div>
|
|
<div class="footer__col">
|
|
<h2 class="footer__ct"><?php echo esc_html__( 'Tours', 'hoponhopoff' ); ?></h2>
|
|
<?php $hoho_footer_col( 'hoho_tours' ); ?>
|
|
</div>
|
|
<div class="footer__col">
|
|
<h2 class="footer__ct"><?php echo esc_html__( 'User Account', 'hoponhopoff' ); ?></h2>
|
|
<?php $hoho_footer_col( 'hoho_account' ); ?>
|
|
</div>
|
|
</nav>
|
|
</div>
|
|
|
|
<div class="container footer__bar">
|
|
<p class="footer__copy">© <?php echo esc_html( gmdate( 'Y' ) ); ?> <?php echo esc_html( get_bloginfo( 'name' ) ); ?>. <?php echo esc_html__( 'All rights reserved.', 'hoponhopoff' ); ?></p>
|
|
<ul class="socials">
|
|
<?php foreach ( $hoho_socials as $network => $url ) : ?>
|
|
<?php if ( $url ) : ?>
|
|
<li><a href="<?php echo esc_url( $url ); ?>" aria-label="<?php echo esc_attr( ucfirst( $network ) ); ?>"><?php echo hoho_icon( $network, 'icon--20' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></a></li>
|
|
<?php endif; ?>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
</div>
|
|
|
|
<a class="support" href="<?php echo esc_url( apply_filters( 'hoho_support_url', '#' ) ); ?>" aria-label="<?php echo esc_attr__( 'Support', 'hoponhopoff' ); ?>">
|
|
<svg class="ring-badge__ring support__ring" viewBox="0 0 100 100" aria-hidden="true">
|
|
<text class="ring-badge__text"><textPath href="#ringPathScroll" startOffset="0">SUPPORT · SUPPORT · SUPPORT · </textPath></text>
|
|
</svg>
|
|
<span class="support__tab"><?php echo hoho_icon( 'headset', 'icon--24' ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?></span>
|
|
</a>
|
|
</footer>
|
|
</div>
|
|
<?php
|