Developers English WordPress Plugin

GetYourGuide Listeo Integration: Developer Guide

Technical guide for developers who need safe template, hook, styling, or integration overrides without touching licensing code.

GetYourGuide Listeo Integration Version 1.2 14 min read Updated Jun 30, 2026
Security boundary

License activation, validation, update authorization, package downloads, entitlement checks, and purchase verification are not customization surfaces. Do not override license AJAX actions, license classes, updater callbacks, stored license status, or remote validation results.

Scope

This guide is for developers extending GetYourGuide Integration for Listeo in a child theme, site plugin, or mu-plugin. Keep customizations inside supported presentation, hook, styling, and compatibility layers.

Runtime requirements

  • WordPress 5.8 or newer.
  • PHP 7.4 or newer.
  • Listeo theme or compatible child theme active.
  • Listings stored as the listing post type.
  • GetYourGuide URLs stored on listings, normally in the Listeo _website meta field.

Important files

FileResponsibility
getyourguide-listeo-integration.phpBootstrap, constants, settings, admin pages, cron, Elementor registration, price history helpers.
includes/shortcode-tour-widget.php[gyg_tour] shortcode, listing/tour resolution, booking card rendering, shortcode assets.
includes/inject-related-tours-grid.phpRelated tours grid, taxonomy matching, term opt-in UI, Listeo placement hooks.
includes/widget.phpElementor widget class Elementor_GetYourGuide_Widget.
includes/class-gygil-license.phpLicensing and updates. Protected infrastructure, not an override target.

Constants and storage

  • GYGIL_VERSION, GYGIL_PLUGIN_FILE, GYGIL_PLUGIN_DIR, GYGIL_PLUGIN_URL.
  • GYGIL_PRICE_HISTORY_TABLE: logical table suffix gygil_price_history.
  • GYGIL_PRICE_REFRESH_CRON_HOOK: scheduled price refresh hook.
  • GYGIL_FETCH_PRICE_AJAX_ACTION and GYGIL_MANUAL_UPDATE_AJAX_ACTION: price lookup/update AJAX actions.
  • gygil_settings: main settings option for locale, currency, widget type, variant, partner ID, auto refresh, and related-grid settings.

Rendering paths

Elementor widget

Registered as gyg_availability_widget. Reads the current listing _website URL and renders GetYourGuide widget attributes.

Shortcode

[gyg_tour] renders a booking card and can resolve by tour ID, listing ID, or listing slug.

Automatic grid

Renders .gygil-related-tours on selected Listeo single-listing hooks.

Supported filters

FilterUse
gygil_inject_term_taxonomiesChange which taxonomies receive the related-grid term opt-in UI.
gygil_inject_selectable_taxonomiesChange public listing taxonomies available for grid matching.
gygil_inject_hook_priorityChange priority when attaching the grid to Listeo hooks.
gygil_script_debugSwitch widget script debug behavior.
listingpilot_hub_render_pathsIntegrate or relocate the ListingPilot hub render path.
listingpilot_dashboard_listAdjust the central ListingPilot dashboard card.

Safe overrides

Add a custom taxonomy to the term opt-in UI:

add_filter('gygil_inject_term_taxonomies', function (array $taxonomies): array {
    $taxonomies[] = 'destination';
    return array_values(array_unique($taxonomies));
});

Move the grid later inside the Listeo placement:

add_filter('gygil_inject_hook_priority', function (): int {
    return 30;
});

Apply presentation changes with CSS instead of editing plugin output:

.gygil-related-tours {
    margin-top: 32px;
}

.gygil-related-tours .gygil-tour-card {
    border-radius: 8px;
}

Debugging checklist

  1. Confirm Listeo is active and the listing post type exists.
  2. Confirm the listing has a valid GetYourGuide URL in _website or a valid explicit tour ID.
  3. Check gygil_settings for locale, currency, partner ID, variant, and related-grid settings.
  4. Identify whether output comes from shortcode, Elementor widget, or automatic grid.
  5. Disable cache/minification temporarily if the external widget script does not initialize.
  6. Check PHP logs, browser console errors, and the price history table.

Do not customize here

  • License activation/deactivation AJAX handlers.
  • License state stored in options or remote validation responses.
  • Updater/download authorization callbacks.
  • Any code that changes whether an unlicensed site receives paid behavior.