Home General

General

General documentation, overviews, and customization guides
By Dustin Grof
8 articles

Blocks Overview

Blocks Overview The Itinerator plugin provides two main categories of blocks to display tourism content on your WordPress site. Block Categories Content Blocks Individual content display blocks that show specific pieces of information. Use these when you want to: - Display a single piece of content - Show specific information about an item - Create custom layouts with individual elements Available Content Blocks: - Title - Display custom titles - Content - Show rich content areas - Contents - Display multiple content items - Description - Show description text - Carousel - Create image carousels - Map - Display interactive maps - Filter - Add content filtering - Form Block - Create contact forms - Socials - Display social media links - Tags - Show content tags - Tasks - Display task lists - Listing Info - Show business information - Listing Buttons - Display action buttons - Listing Website Button - Show website links Collection Blocks Blocks that display multiple items from your Itinerator content. Use these when you want to: - Show lists of content (itineraries, listings, events) - Display multiple items in grids or carousels - Create browseable content sections Available Collection Blocks: - Itineraries - List multiple itineraries - Itinerary - Display single itinerary with map - Listings - Show business listings - Listings Featured - Display featured listings - Listings Additional - Show additional listings - Events - Display event listings - Event - Show single event details - Challenges - Display challenge listings - Challenge - Show single challenge details - DMOs - Display destination marketing organizations - DMO Itineraries - Show DMO-specific itineraries - Regions - Display region information - Related Posts - Show related content How to Choose the Right Block For Single Items Use Content Blocks when you want to display: - A specific title or heading - Individual content pieces - Custom forms or maps - Social media links - Business contact information For Multiple Items Use Collection Blocks when you want to display: - Lists of itineraries - Business directories - Event calendars - Challenge listings - Regional content For Custom Layouts Combine both types to create: - Hero sections - Title + Map + Description - Content grids - Multiple Content blocks in columns - Business pages - Listing Info + Listing Buttons + Map - Event pages - Event details + Related Events + Socials Block Configuration Common Settings Most blocks share these configuration options: Display Options: - Show Title - Display/hide the title - Show Description - Display/hide description text - Show Image - Display/hide featured images - Show Tags - Display/hide content tags Layout Options: - Columns - Number of columns for grid layouts - Alignment - Left, center, or right alignment - Custom CSS Class - Add custom styling classes Content Options: - Content Type - Filter by specific content types - Tag Filters - Filter by specific tags - Sort Order - How to sort the content Block-Specific Settings Each block has unique settings relevant to its purpose: - Map blocks - Zoom level, map style, marker options - Form blocks - Form fields, submission settings - Carousel blocks - Auto-play, navigation options - Filter blocks - Filter categories, display options Shortcode Usage Every block can also be used as a shortcode for page builders and classic editors. Basic Shortcode Format [tourismo-[block-name]] Example Shortcodes [tourismo-itineraries] [tourismo-listings show_title="true" columns="3"] [tourismo-map zoom="12"] [tourismo-title text="Welcome to Our Region"] Getting Shortcodes See Editor Options for detailed shortcode usage instructions. Best Practices Content Organization - Use consistent settings across similar blocks - Group related content with appropriate blocks - Consider user flow when arranging blocks Performance - Limit the number of blocks per page - Use appropriate caching settings - Optimize images in your Itinerator admin User Experience - Test on mobile devices to ensure responsiveness - Use clear titles and descriptions - Provide clear calls-to-action with button blocks Troubleshooting For detailed troubleshooting information, see the Troubleshooting guide. Next Steps - Getting Started - Create your first page - Editor Options - Choose your editing method - Individual Block Guides - Learn about specific blocks

Last updated on Sep 16, 2025

Template Customization

Template Customization This guide covers how to customize the appearance of Itinerator blocks to match your theme and brand. Overview The Itinerator plugin uses a flexible styling system that allows you to: - Override default Bootstrap styles - Add custom CSS classes - Target specific blocks using body classes Body Classes for Targeting The plugin automatically adds CSS classes to the <body> tag to help you target specific blocks: - .has-itinerator-blocks - Added when any Itinerator block is present on the page - .has-itinerator-block-{name} - Added for specific block types (e.g., .has-itinerator-block-itineraries) Example targeting: /* Target all Itinerator blocks */ .has-itinerator-blocks .itin .card { border-radius: 12px; } /* Target only itinerary blocks */ .has-itinerator-block-itineraries .itin.itinerator-itineraries { background-color: #f8f9fa; } /* Target only event blocks */ .has-itinerator-block-events .itin.itinerator-events { padding: 2rem; } CSS Class Override System The plugin includes a CSS class override system that allows you to customize Bootstrap classes to match your theme or page builder. How It Works - Class overrides - Replace Bootstrap classes with custom ones - Settings-based - Configure overrides in the plugin settings area - Template integration - Use helper functions in templates - Fallback support - Falls back to Bootstrap defaults if no override set Available Helper Functions The plugin provides helper functions for consistent styling: // Button classes btn_primary($additional_classes) btn_secondary($additional_classes) btn_outline($additional_classes) btn_success($additional_classes) btn_danger($additional_classes) // Component classes card_class($additional_classes) card_body_class($additional_classes) btn_wrapper_class($additional_classes) form_control_class($additional_classes) badge_class($additional_classes) How to Use Helper Functions In your templates, you can use these functions to get the appropriate CSS classes: <?php use function Itinerator\Config\{ btn_primary, btn_secondary, card_class, form_control_class }; ?> <button class="<?php echo btn_primary(); ?>">Submit</button> <button class="<?php echo btn_secondary('btn-sm'); ?>">Cancel</button> <div class="<?php echo card_class('mb-4'); ?>"> <input type="email" class="<?php echo form_control_class(); ?>" name="email"> </div> Customization Methods Method 1: CSS Class Overrides Configure custom CSS classes in the WordPress admin: 1. Go to Itinerator → Settings 2. Scroll to the Theme Settings section 3. Configure class overrides for buttons, cards, forms, etc. 4. Save settings to apply changes Available Overrides: - Button Classes - Primary, secondary, outline, success, danger buttons - Card Classes - Card containers and card body elements - Form Classes - Form controls and input elements - Badge Classes - Badge and tag elements - Wrapper Classes - Button wrapper elements Example Override Settings: - Primary Button: elementor-button elementor-button-primary - Card Container: custom-card theme-card - Form Control: wpforms-field-input Method 2: Custom CSS Classes Add custom CSS classes to blocks in the editor: 1. Select a block in the editor 2. Open block settings in the sidebar 3. Add custom CSS class in the Advanced section 4. Write CSS targeting your custom class Example: .has-itinerator-blocks .itin .card { border: none; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } .has-itinerator-block-itineraries .itin .itinerator-itineraries { background-color: #f8f9fa; border-radius: 12px; padding: 2rem; } Method 3: Theme Customizer Use WordPress Customizer for global changes: 1. Go to Appearance → Customize 2. Add Custom CSS section 3. Target Itinerator classes 4. Preview changes in real-time Example: /* Global Itinerator styling */ .has-itinerator-blocks .itin { font-family: 'Your Custom Font', sans-serif; } .has-itinerator-blocks .itin .btn-primary { background-color: #your-brand-color; border-color: #your-brand-color; } Method 4: Template Override Helper Plugin For advanced customization, use the Itinerator Template Override Helper plugin to store templates, CSS, and JavaScript outside of your theme. See the Template Override Helper Plugin section below for detailed information. Common Customizations Basic Styling Examples Colors and Typography: .has-itinerator-blocks .itin { font-family: 'Your Custom Font', sans-serif; } .has-itinerator-blocks .itin .btn-primary { background-color: #your-primary-color; border-color: #your-primary-color; } Layout and Spacing: .has-itinerator-blocks .itin .card { border-radius: 12px; box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); margin-bottom: 2rem; } Targeting Specific Blocks: .has-itinerator-block-itineraries .itin.itinerator-itineraries { background-color: #f8f9fa; padding: 2rem; } Responsive Design Mobile Optimizations Mobile-First Approach: /* Base styles (mobile) */ .has-itinerator-blocks .itin .card { margin-bottom: 1rem; } /* Tablet and up */ @media (min-width: 768px) { .has-itinerator-blocks .itin .card { margin-bottom: 2rem; } } /* Desktop and up */ @media (min-width: 1024px) { .has-itinerator-blocks .itin .card { margin-bottom: 3rem; } } Touch-Friendly Elements: .has-itinerator-blocks .itin .btn { min-height: 44px; /* Touch-friendly minimum */ padding: 0.75rem 1.5rem; } .has-itinerator-blocks .itin .card { cursor: pointer; } Advanced Customizations Template Override Helper Plugin For easier template management, you can use the Itinerator Template Override Helper plugin. This plugin allows you to store template overrides outside of your theme directory and add custom CSS and JS that will be theme independent. How It Works The helper plugin: - Stores template overrides in the plugin folder - Creates symlinks to your active theme directory - Enqueues app.js and app.css for custom styling and JavaScript - Keeps templates organized outside of theme files - Simplifies updates and maintenance Benefits - Theme independence - Templates survive theme updates - Better organization - All overrides in one location - Easier backups - Template overrides backed up with plugin - Cleaner themes - No template files cluttering theme directory Installation 1. Download the helper plugin from https://tourismo.co/wordpress-plugin 2. Install and activate like any WordPress plugin 3. Configure template overrides through the plugin interface 4. Templates are automatically linked to your active theme Usage Once activated, the helper plugin will: - Create a dedicated directory for template overrides - Automatically symlink templates to your active theme - Provide an interface for managing template files - Handle template updates and maintenance Note: This is a basic overview. More detailed documentation for the helper plugin will be available in future updates. JavaScript Customizations Add custom JavaScript for interactive features: // Custom hover effects jQuery(document).ready(function($) { $('.has-itinerator-blocks .itin .card').hover( function() { $(this).addClass('hover-effect'); }, function() { $(this).removeClass('hover-effect'); } ); }); Performance Optimizations CSS Optimization: /* Use specific selectors for better performance */ .has-itinerator-blocks .itin .card .card-title { /* More specific than just .card-title */ } /* Avoid expensive properties */ .has-itinerator-blocks .itin .card { /* Use transform instead of margin/padding for animations */ transform: translateY(0); transition: transform 0.2s ease; } Troubleshooting Customizations Common Issues Styles not applying: - Check CSS specificity - Clear browser cache - Verify CSS syntax - Check for conflicting styles Responsive issues: - Test on actual devices - Check media query syntax - Verify viewport meta tag - Test different screen sizes Performance problems: - Minimize CSS file size - Use efficient selectors - Avoid expensive properties - Optimize images Debugging Tools Browser Developer Tools: 1. Inspect elements to see applied styles 2. Check CSS specificity with computed styles 3. Test responsive design with device simulation 4. Profile performance with performance tools CSS Validation: - Use CSS validators to check syntax - Test with different browsers - Verify vendor prefixes Best Practices Maintainability - Use consistent naming conventions - Document customizations thoroughly - Test across browsers and devices - Keep backups of custom code Performance - Minimize CSS file size - Use efficient selectors - Optimize images and assets - Enable caching for CSS files Accessibility - Maintain color contrast ratios - Use semantic HTML structure - Test with screen readers - Ensure keyboard navigation Resources CSS References - Bootstrap 4.6.1 Documentation - CSS Grid Layout - Flexbox Layout Tools - CSS Validator - Color Contrast Checker - CSS Specificity Calculator Need help with customization? Contact Itinerator support or check the Troubleshooting guide.

Last updated on Sep 16, 2025

Editor Options

Editor Options The Itinerator plugin works with different WordPress editors and page builders. This guide explains your options and how to use each one. Gutenberg Block Editor The recommended approach for most users. How It Works - Visual editing - See your content as you build it - Drag and drop - Easy block management - Live preview - See how content will roughly look on the frontend - Integrated settings - Configure blocks directly in the editor Adding Itinerator Blocks 1. Open the block editor on any page or post 2. Click the + button to add a new block 3. Search for "Itinerator" in the block inserter 4. Choose your block from the available options 5. Configure settings in the block sidebar Block Categories - Itinerator Collections - Blocks that display multiple items (itineraries, listings, events) - Itinerator Content Blocks - Individual content display blocks (title, description, map) Block Configuration - Settings panel - Configure block options in the right sidebar - Live preview - See changes immediately - Shortcode display - Copy the generated shortcode for use elsewhere Classic Editor & Page Builders For users who prefer the classic editor or use page builders like Elementor, Divi, or Beaver Builder. How It Works - Shortcode-based - Use shortcodes instead of blocks - Copy-paste workflow - Get shortcodes from blocks (or block documentation), paste into your editor - Flexible placement - Place content anywhere in your layout - Page builder compatible - Works with most popular page builders Getting Shortcodes There are two ways to get shortcodes for use in page builders: Method 1: Shortcode Generation Feature (Recommended) 1. Create a test page with the Gutenberg block editor 2. Add and configure your desired Itinerator blocks 3. Copy the generated shortcode from each block's settings panel 4. Paste the shortcode into your page builder's shortcode widget/block This method ensures you get the exact shortcode with your specific configuration. Method 2: Documentation Reference - See the Blocks Overview for shortcode examples - Each block documentation includes shortcode syntax - Use this for reference or when you need to manually construct shortcodes Shortcode Syntax Basic shortcode: [tourismo-carousel] With options: [tourismo-itineraries show_title="true" show_description="false" columns="3"] Common shortcode prefixes: - tourismo- - Main block shortcodes - itin- - Individual content shortcodes Page Builder Integration Elementor: 1. Add a Shortcode widget 2. Paste your Itinerator shortcode 3. Configure widget settings as needed Divi: 1. Add a Code module 2. Paste your Itinerator shortcode 3. Set display options in module settings Beaver Builder: 1. Add a HTML widget 2. Paste your Itinerator shortcode 3. Configure widget settings Classic Editor: 1. Switch to Text mode (if needed) 2. Paste shortcodes directly into content 3. Switch back to Visual mode to see preview Choosing Your Approach Use Gutenberg Blocks When: - ✅ You're comfortable with the block editor - ✅ You want visual editing and live preview - ✅ You're building new pages from scratch - ✅ You want the easiest setup process Use Shortcodes When: - ✅ You prefer the classic editor - ✅ You're using a page builder - ✅ You need precise placement control - ✅ You're adding content to existing pages - ✅ You want to mix with other content easily Workflow Comparison Gutenberg Workflow 1. Add block → 2. Configure settings → 3. See live preview → 4. Publish Shortcode Workflow 1. Configure block (Gutenberg test page) → 2. Copy generated shortcode → 3. Paste in page builder → 4. Publish Tips for Both Approaches Performance - Use page whitelist in settings to limit script loading - Cache your pages for better performance - Optimize images in your Tourismo admin Content Management - Update content in your Tourismo admin, not WordPress - Use consistent settings across similar blocks - Test on different devices to ensure responsiveness Troubleshooting - Clear caches if content doesn't update - Check API keys if content doesn't load - Verify shortcode syntax if using page builders Next Steps - Getting Started - Create your first page - Blocks Overview - Learn about available blocks - Troubleshooting - Solve common issues

Last updated on Sep 16, 2025

Content Filters

Content Filters Content filters allow you to control which Itinerator items appear in your website's sitemap and WordPress search results for each Itinerator Template Page. These filters prevent duplicate URLs and ensure search engines and users find content in the correct location. What Are Content Filters? Content filters determine which items belong to which Itinerator Template Page. When you have multiple template pages for the same content type (for example, separate pages for "Breweries" and "Sip & Stay" listings), the same filters control: 1. Sitemap Generation: Which items appear in your XML sitemap under each page's URL structure 2. WordPress Search Results: Which items appear in search results and what URLs those results use This unified configuration means you only need to set filters once, and they automatically apply to both sitemaps and search. When Do You Need Content Filters? You need content filters when: - ✅ You have multiple Itinerator Template Pages for the same content type - ✅ Different template pages should display different subsets of items - ✅ You want to prevent duplicate URLs in your sitemap - ✅ You want search results to route to the correct template page Example Scenario: - You have a "Breweries" page (Single Listing template) - You have a "Sip & Stay" page (Single Listing template) - Both pages display listings, but different types - Without filters: Every listing appears twice in the sitemap (once under each page) and search results may route incorrectly - With filters: Breweries appear only under the Breweries page, Sip & Stay listings only under that page How Content Filters Work Content filters use a two-part system: Filter Groups 1. Listing Type Filters (for Single Listing pages only): Filter by listing main types (e.g., "breweries", "accommodations") 2. Tag Filters (for all page types): Filter by tags from specific categories (e.g., "kayaking" from "experience" category) Filter Logic - OR logic within filter groups: Items match if they have any of the selected listing types OR any of the selected tags - AND logic between filter groups: Items must match all specified filter groups - Example: If you set listing type "Breweries" AND tag "Food & Drink", items must be both a brewery AND tagged with Food & Drink Matching Behavior When an item could match multiple Itinerator Template Pages: - The first matching page (by page order) is used - This means page order matters - configure more specific pages first - If no filters match, the first page for that content type becomes the fallback How to Configure Content Filters Content filters are configured in the page editor for each Itinerator Template Page. Step 1: Open Page Settings 1. Edit the Itinerator Template Page you want to configure 2. In the block editor, look for the Itinerator panel in the right sidebar 3. Scroll down to the Content Filters section Step 2: Configure Listing Type Filters (Listings Only) If you're configuring a Single Listing template page: 1. Find the "Filter by Listing Type" section 2. Check the boxes for the listing types you want to include - For example: Check "Breweries" and "Tap House" for a breweries page - Or check "Sip & Stay" for an accommodations page 3. Selected types will appear in the sitemap and search results for this page Note: Leave empty to include all listing types (backwards compatible). Step 3: Configure Tag Filters (All Page Types) For any Itinerator Template Page type: 1. Find the "Tag Filters" section 2. Click "Add new filter" for each tag you want to filter by 3. For each filter: - Select the Tag Category (e.g., "Food & Drink", "Accommodations") - Select the Tag Name from that category 4. Add multiple filters as needed Step 4: Save Your Changes 1. Click "Update" or "Publish" to save the page 2. The sitemap and search will automatically use these filters Viewing Content Filter Summary You can view all your content filter configurations in one place: 1. Go to Itinerator → Settings in your WordPress admin 2. Click the "Sitemap" tab 3. You'll see a table showing: - All Itinerator Template Pages with content filters configured - Their page types - Listing type filters (if applicable) - Tag filters - Quick "Edit" links to modify filters This summary view helps you: - See the big picture of all your filter configurations - Quickly identify pages that need filters - Access page editors directly to make changes Best Practices ✅ Do: - Set filters for every Itinerator Template Page that has duplicates - Use specific filters - Be precise about which items belong where - Test your sitemap and search after configuring filters to verify URLs are correct - Review the summary table periodically to ensure consistency - Order pages strategically - More specific pages should be configured first ❌ Don't: - Don't leave filters empty if you have duplicate Itinerator Template Pages - Don't overlap filters between pages (each item should appear on only one page) - Don't forget to save after configuring filters How It Works: Sitemap Generation When the sitemap is generated: 1. The plugin reads filter settings from each Itinerator Template Page 2. For each page, it queries the API with the specified filters 3. Only items matching the filters are included in the sitemap for that page 4. Each item appears exactly once, under the correct template page Example: - "Breweries" page has filter: Listing Type = "Breweries" - "Sip & Stay" page has filter: Listing Type = "Sip & Stay" - Sitemap generates: - /breweries/brewery-slug-1 (only breweries) - /sip-stay/accommodation-slug-1 (only sip & stay) - No duplicates! How It Works: WordPress Search Integration Content filters also control WordPress search result routing: 1. Search pulls remote Itinerator records for every content type 2. Each item is evaluated against your content filters 3. Items are matched to the first Itinerator Template Page whose filters they satisfy 4. Search results use the matched page's URL structure 5. Listing type filters only apply to Single Listing templates; leave blank to include every listing type in search 6. Tag filters apply to all template types and still use OR logic within the tag group Because search and the sitemap share the same configuration, you only have to manage filters in one place. Troubleshooting All items still appearing on all pages - Check your filters are saved - Make sure you clicked "Update" after configuring - Verify filter values - Check the Sitemap tab in settings to see what's configured - Clear cache - If using caching, clear it and regenerate the sitemap Items not appearing in sitemap or search - Check filter logic - Make sure your filters aren't too restrictive - Verify API data - Ensure items exist in your Tourismo admin with matching tags/types - Check page status - Itinerator Template Pages must be published Items showing under wrong template in search - Review page order - First matching page wins, so overlapping filters will favor whichever page loads first - Check filter specificity - More specific filters should be on pages that appear earlier in the page list - Verify filter configuration - Use the summary table to see all configured filters Need to change filters - Edit the page - Go to Pages → Edit, or use the "Edit" link in the Sitemap settings tab - Update filters - Modify the Content Filters section - Save changes - The sitemap and search will update automatically Related Documentation - Getting Started - Learn about Itinerator Template Pages - Blocks Overview - Understand content blocks - Configuration - Plugin settings For technical details about sitemap generation and search integration, see the developer documentation.

Last updated on Nov 14, 2025

Troubleshooting

Troubleshooting Guide This guide helps you solve common issues with the Itinerator WordPress plugin. Quick Diagnosis Check API Keys 1. Verify Platform API Key is valid 2. Test DMO API Key (if using DMO content) 3. Check Google Maps API Key (if using maps) Common Issues No Content Displaying Symptoms: - Blocks show "No content to display" - Empty pages with no error messages - "Loading..." messages that never complete Solutions: 1. Check API keys in Itinerator → Settings 2. Verify content exists in your Tourismo admin 3. Clear caching plugins (W3 Total Cache, WP Rocket, etc.) 4. Clear Itinerator Cache (From Admin bar or plugin Settings screen.) 5. Check browser console for JavaScript errors 6. Test with a simple block first Debugging Steps: # Check if API is responding curl -H "Authorization: Bearer YOUR_API_KEY" https://admin.itinerator.ca/api/wp/v1/itineraries Blocks Not Appearing Symptoms: - No Itinerator blocks in block inserter - "Itinerator" not found in block search - Missing block categories Solutions: 1. Verify plugin activation in Plugins → Installed Plugins 2. Check WordPress version (requires 5.0+) 3. Ensure you're using block editor (not classic editor) 4. Clear browser cache and refresh 5. Check for JavaScript errors in browser console Debugging Steps: - Try a different browser - Check API key is valid, resave the plugin settings page. - Disable other plugins temporarily - Check if theme supports Gutenberg Layout Issues Symptoms: - Blocks not aligned properly - Responsive design not working - CSS conflicts with theme Solutions: 1. Check Bootstrap compatibility - Plugin uses Bootstrap 4.6.1 2. Test different column settings (1-4 columns) 3. Try different alignment options 4. Add custom CSS classes for styling 5. Check theme CSS conflicts Performance Problems Symptoms: - Slow page loading - High server resource usage - Timeout errors Solutions: 1. Use page whitelist in settings to limit script loading 2. Enable Itinerator caching (From plugin Settings page) 3. Reduce number of blocks per page 4. Optimize images in your Tourismo admin 5. Use appropriate cache settings Performance Tips: - Limit to 5-10 blocks per page Google Maps Not Working Symptoms: - Maps not displaying - "Google Maps API error" messages - Blank map areas Solutions: 1. Verify Google Maps API key in settings 2. Check API key restrictions (domain, IP) 3. Enable Maps JavaScript API in Google Cloud Console 4. Set up billing in Google Cloud Console 5. Check API quota and usage limits API Key Setup: 1. Go to Google Cloud Console 2. Create or select a project 3. Enable Maps JavaScript API 4. Create credentials (API key) 5. Restrict key to your domain 6. Add key to plugin settings Shortcode Issues Symptoms: - Shortcodes not rendering - "Shortcode not found" errors - Shortcodes showing as text Solutions: 1. Verify shortcode syntax (check brackets and quotes) 2. Check if plugin is activated 3. Clear page builder caches 4. Test shortcode in classic editor 5. Copy shortcode from block settings 6. Verify that each shortcode has required attributes, see block description Common Shortcode Mistakes: # Wrong - missing quotes [tourismo-itineraries show_title=true] # Correct - with quotes [tourismo-itineraries show_title="true"] # Wrong - extra spaces [tourismo-itineraries show_title = "true"] # Correct - no extra spaces [tourismo-itineraries show_title="true"] Theme Compatibility Symptoms: - Blocks not styling properly - Layout conflicts with theme - Missing Bootstrap styles Solutions: 1. Use custom CSS classes for styling 2. Test with default WordPress theme 3. Contact theme developer for compatibility Advanced Troubleshooting Debug Mode Enable WordPress debug mode to see detailed error messages: // Add to wp-config.php define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); Check Error Logs WordPress Debug Log: - Location: /wp-content/debug.log - Check for PHP errors and warnings Server Error Logs: - Apache: /var/log/apache2/error.log - Nginx: /var/log/nginx/error.log - Check for server-level issues API Testing Test API connectivity directly: # Test Platform API curl -H "Authorization: Bearer YOUR_PLATFORM_API_KEY" \ https://admin.tourismo.co/api/wp/v1/itineraries # Test DMO API (if applicable) curl -H "Authorization: Bearer YOUR_DMO_API_KEY" \ https://admin.tourismo.co/api/wp/v1/dmos Browser Developer Tools 1. Open Developer Tools (F12) 2. Check Console for JavaScript errors 3. Check Network tab for failed requests 4. Check Elements tab for CSS issues Getting Help Before Contacting Support 1. Document the issue: - Screenshots of the problem - Error messages (exact text) - Steps to reproduce - Browser and device information 2. Gather system information: - WordPress version - Plugin version - Theme name and version - PHP version - Server environment 3. Test basic functionality: - Try with default WordPress theme - Disable other plugins temporarily - Test in different browser - Check on mobile device Contact Information Itinerator Support: - Email: support@itinerator.ca - Website: https://support.tourismo.co - Include detailed issue description WordPress Support: - For general WordPress issues - WordPress.org support forums Prevention Tips Regular Maintenance - Keep WordPress updated - Update plugins regularly - Backup your site before major changes - Monitor error logs Best Practices - Test changes on staging site first - Use appropriate caching settings - Optimize images before uploading - Monitor performance regularly Documentation - Keep notes of customizations - Document API keys and settings - Save working configurations - Track changes over time Still having issues? Contact Itinerator support with detailed information about your problem.

Last updated on Sep 16, 2025

Changelog

Changelog [Unreleased] Added - Changed - Fixed - [2.4.3] - 2025-11-06 Added - Added subtitle property to Listings block Changed - Enhanced API error handling in query_itin_api function by increasing timeout, adding detailed error messages, and checking for empty response body - Updated itinerary block documentation to include featured status and subtitle properties for stop types [2.4.2] - 2025-11-04 Added - Added featured property to itineraries - Added subtitle property to stop Changed - Tweaked error message [2.4.1] - 2025-10-30 Added - Enhanced LinkedPageSelect component with keyName prop and optimized useEffect Changed - Cleaned up unused imports [2.4.0] - 2025-10-30 Added - Implemented safe API querying across templates - Added fallback image function to StopEvent template - Enhanced ItineraryBlock to fetch itinerary data from page metadata - Enhanced Map block with advanced tag filtering capabilities - Added tag name extraction functionality for filtering records - Completed automatic plugin update system - Added automatic plugin update system - Enhanced developer documentation sync system - Implemented calendar view for events with caching and styling - Enhanced shortcode handling for array attributes in ShortcodeDisplay component Changed - Updated event date preset button structure for compatibility - Standardized querydata handling across template classes - Prevented SEO data setting during REST API requests - Prevented duplicate initialization of Itinerator collapse and tab components - Removed bootstrap overrides when bootstrap is disabled Fixed - Updated default values in listings attributes and removed console logs from bootstrap utilities - Cleaned up debugging logs from map location processing [2.3] - 2025-10-02 Added - Enhanced ItineraryBlock to fetch itinerary data from page metadata - Enhanced Map block with advanced tag filtering capabilities - Added tag name extraction functionality for filtering records - Implemented automatic plugin update system - Enhanced developer documentation sync system - Implemented calendar view for events with caching and styling - Enhanced shortcode handling for array attributes in ShortcodeDisplay component - Enhanced Filter and Map blocks with dynamic filtering capabilities - Enhanced Itinerary block with leg hero images support and added back linked page select - Added tags property to contents - Updated region data fetching to always use hierarchical structure Changed - Updated event date preset button structure for compatibility - Standardized querydata handling across template classes - Prevented SEO data setting during REST API requests - Prevented duplicate initialization of Itinerator collapse and tab components - Removed bootstrap overrides when bootstrap is disabled - Indicated default views in UI Fixed - Updated default values in listings attributes and removed console logs from bootstrap utilities - Cleaned up debugging logs from map location processing [2.2] - 2025-09-16 Added - Added canonical URL handling for Itinerator pages - Enhanced page title handling to support multiple title properties - Implemented comprehensive page title and meta description handling system - Added page title handling with new theme display filter - Added listing type filter support in Filter block - Improved region data retrieval in Filter class - Enhanced map functionality with listing type support - Enhanced form block to support WebsiteField input - Added MCP configuration for context7 server - Added automated Chatwoot documentation sync system - Added link to listing name - Enhanced map block location handling by adding event and itinerary support, improving coordinate validation, and updating sidebar options Changed - General documentation updates, refactored for easier reading and less duplication [2.1] - 2025-09-02 Added - Added filter classes to contents - Added content shortcodes for single content pages - Added plugin updater system Fixed - Fixed error with parsedown [2.0] - 2025-07-24 Added - Added content shortcodes - Enhanced Filter Block with Region Display Modes - Added support for featured regions - Added region_name property to Itinerary class - Enhanced SimpleEvent Class with Region Attributes - Enhanced Regions Block functionality and documentation - Added Admin Page Type Indicators feature - Added Integration Plans for Divi, Divi 5, and Elementor - Added Powered by Tourismo Footer functionality - Enhanced Custom Template functionality across multiple blocks - Added "Custom Template Name" option to ViewTypeControl in multiple blocks - Added Itineraries property to template classes - Enhanced collection blocks with manual region filtering - Added location property to Event class and updated Stop class for display type - Enhanced Socials block to improve data handling and display - Added fetch_full_object and get_singular_type methods to BlockTemplate class - Enhanced Regions block to support display of related itineraries - Enhanced Related Posts block to support shortcodes in custom query - Enhanced Itinerary block to support region and event details - Enhanced listings and additional listings functionality with mainType support - Added showRelatedItineraries attribute to listings and templates - Added reCAPTCHA support to FormBlock for enhanced security - Enhanced RelatedPosts block with additional attributes and custom query support - Added listing type and showRegion properties - Added region filtering to events - Added region properties to event and listing templates - Added tabbed itinerary template and relevant Map functionality - Refactored filter component and enhanced filtering logic - Enhanced Itinerary and Stop templates with Event support - Added view types to regions block, carousel option to listings, and templates to itineraries - Enhanced Flickity Carousel initialization and options - Implemented Bootstrap CSS variables override system and optimized styles - Added ShortcodeDisplay component to editor blocks - Refactored Bootstrap styles and introduced custom reboot - Enhanced editor block error handling for empty content - Enhanced block class addition to body and improved error handling - Added frontend page builder detection functions - Added option to disable simplified theme CSS for custom styling - Implemented fallback image logic in template classes - Enhanced content templates and media handling - Added CSS class override implementation guide - Enhanced template logic for challenges and featured listings - Added className and block alignment attribute to multiple templates - Added additional classes to make front end styling more robust - Implemented reusable TagsList component and refactored tag rendering - Added SAMPLE_EVENT and SAMPLE_CHALLENGE data structures - Enhanced Map component bounds handling to include boundaries - Enhanced template handling for markdown parsing and shortcode rendering - Enhanced Event block with additional show attributes - Added namespacing rules for PHP, CSS, and JavaScript in documentation - Enhanced multiple blocks with new show attributes and rendering options Changed - Changed to get all global content types, not just platform - Only apply filter if there are URL params to apply - Refined Regions Block documentation and query logic - Updated "Powered by Tourismo" footer functionality - Removed empty "Display Options" panel from sidebar in itineraries block - Updated Itinerary templates to include dynamic display types - Clarified badge naming - Refactored block registration and shortcode handling for improved structure - Updated dependencies and configuration for improved build process - Refactored script loading logic for Itinerator - Sanitized JSON output in map template - Updated templates to include itinerator page type classes - Refactored CSS class helpers and updated template usage - Refactored settings management to use unified settings array - Updated spacing classes in Bootstrap and editor blocks to use v4.6 classes - Refactored templates and JSON attributes to maintain backward compatibility - Refactored cursor rules documentation into modular files - Refactored templates to include pluralization function - Refactored templates to include namespacing for PHP functions and methods - Refactored Challenges block by removing unused show attributes - Refactored SimpleListing class for improved readability and structure Fixed - Fixed tag data filtering - Switched to SimpleEvent class for Events collection block to avoid post mapping bug - Fixed PHP 8.1 deprecation notices - Fixed build error on dev server - Fixed filter logic for region filtering - Fixed namespacing issue in menu setup - Fixed Dotenv conflict with older versions - Fixed DMOs block not working on single listing and event - Removed all backslash prefixes for global and WP functions - Fixed map container class [1.13] - 2025-07-03 Added - Enhanced content block to handle all types of content - Refactored content handling and introduced ContentsBlock - Added additional default_contents to blacklist - Added project essentials documentation for Itinerator Plugin - Added events to itineraries Changed - Refactored content handling and removed ContentItem block - Refactored content handling Fixed - Removed debug output and no-content handling from content templates [1.12] - 2025-06-24 Added - Implemented frontend page builder detection in get_page_data function - Enhanced caching functionality in admin bar and API queries - Added block development guide outlining the four-part block system - Added sorting feature to challenges, itineraries, listings, and regions [1.11] - 2025-04-30 Added - Enhanced map functionality to handle single marker cases - Added cursor rules documentation for Itinerator plugin - Enhanced trail.js with improved scrolling and animation handling - Enhanced block editor integration and API key validation - Enhanced map marker handling and validation across components - Added featured property to SimpleListing class - Implemented smooth animation system for map interactions and enhanced InfoWindow handling - Enhanced form-block template with custom redirect functionality - Implemented set_target_paths method and enhanced shortcode handling in Form class - Enhanced form-block template with safe_id function and input sanitization - Added Tasks and Task classes, enhanced block registration and templates - Refactored Challenge and ChallengeBlock classes, introduced SimpleChallenge Changed - Removed unused templates - Refactored settings menu to remove unnecessary backslashes from function calls - Refactored templates to consistently use namespaced functions - Upgraded wordpress-seo-stubs and removed dependencies no longer used - Refactored FormBlock and Tasks classes to improve form handling and API interactions Fixed - Fixed map centering issues - Fixed missing pluralize function namespacing - Fixed map centering bug and DMOs block breaking - Refactored shared_block_assets function to streamline script registration and debugging [1.10] - 2025-02-10 Added - Enhanced script loading and debugging logic - Enhanced shortcode detection and script loading logic - Enhanced shortcode handling and registration in Itinerator - Implemented itinerary filtering and visibility toggles in DmoItinerariesBlock - Updated Snowplow tracking script URLs to point to the new Tourismo site - Enhanced recurring event occurrence formatting in Events template - Enhanced user permissions for cache clearing functionality - Implemented reset functionality for theme color settings - Added clear_itin_cache function for AJAX cache clearing - Enhanced cache clearing functionality in Itinerator - Added carousel images to event - Enhanced form block with advanced input features and dynamic file handling - Added support for email field - Added whitelist field to plugin settings Changed - Reverted domains for Snowplow - Refactored script loading logic in shared block assets and helpers - Improved event cost display logic in event details template - Updated hero figure styling in itineraries grid template - Registered itinerator store conditionally to prevent duplicate registrations - Formatted image field submissions in proper data URI format - Updated deploy script to serve file to Tourismo domain Fixed - Fixed undefined error in Display component by safely handling sample.id [1.9] - 2024-05-23 Added - Refactored Events Block UI with enhanced layout and presentation - Enhanced date filtering logic with improved event time parsing and debugging - Added Snowplow tracking integration and settings field - Added API transient caching and clear/disable ability - Added event filtering via moment.js and flatpickr - Added Google Maps to block editor - Added region slug and filter classes to SimpleItinerary class - Added transients and clear button - Added shortcodes to each block - Added theme settings for color and global inline style vars - Added region shortcode to itinerary - Added shortcodes for all blocks - Added page type to classic editor - Added metabox to classic editor to set Itin page type Changed - Refactored Page Settings Plugin with Dynamic WordPress Component Loading - Improved accessibility and code formatting across components - Improved view for DMO itineraries - Improved tooltip to accept HTML tags - Changed media queries to min-width - Reworked event display in grid and single views - Declared dynamic properties in class to avoid deprecation notice - Cleaned up console.logs - Moved events functions to class as methods - Updated dependencies to use wp-block-editor instead of wp-editor - Updated filter behavior to accept/update URL parameters - Made itineraries filterable - Removed transients from plugin - Moved the enqueuing of Itin JS into shortcode/block render - Completed MVP of form block - Updated toggle controls behavior - Major style and view updates Fixed - Fixed URL parameters on filters - Fixed filter logic to work with events and listings - Excluded flatpickr from prefixing on build - Fixed syntax errors - Fixed checkbox required issue - Fixed form block submission and display issues - Fixed image upload in form block - Fixed button border radius theme setting - Fixed persistent bug on single itinerary transient - Fixed transient cache for alpha listings - Fixed options not saving on first save bug - Fixed theme settings to show when no CMS extension [1.8] - 2023-11-06 Added - Added Itin class to block templates - Added PostCSS selector prefix .itin to bootstrap and flickity webpack config - Added FilterRecordsRegion toggle and enable help attribute on ToggleControl - Added filterRecordsByRegion and RegionId where necessary - Added loading=async to Google Maps - Added docblock comments for PHP backward compatibility - Added total_position to stop - Added REST route for dmos/itineraries - Added custom radius and gap attributes and controls - Added conditional registration of blocks based on API keys - Added error checking in useRecords fetch - Added platform_logo - Added options to database for API key checks - Added constants and globals for API key validation - Added DMO/partner API key field - Added option to include bootstrap to admin settings - Added auto column option to DMO grid Changed - Cleaned up bootstrap - Updated composer dependencies - Changed region_page_slug to region_slug - Removed bootstrap from admin - Allowed itinerary block to be placed on any page by selecting a specific itinerary - Updated properties in simple classes - Moved CSS out of template and tweaked templates - Updated globals and finished API key checks - Modified API response to return an array - Decided which blocks to register based on API key validity Fixed - Fixed fatal error on activation - Fixed bootstrap path - Fixed permalink check to include any other type - Fixed carousel object error [1.7] - 2023-09-14 Added - Added type to listing class - Added check for postname permalink and display notice if not - Added listing_type to Stop and type to SimpleListing - Added support for polymorphic stop targets - Added shortcodes to Itinerary class Changed - Adjusted admin notice - Converted icon name to lowercase Fixed - Fixed line breaks in parse_markdown [1.6] - 2023-07-27 Added - Added Itinerary shortcodes - Extended StopListing from SimpleListing and added more Tags to Simple Classes - Fixed TagCategory filtering - Added babel-plugin-lodash to keep global lodash clean - Updated events to new schema and implemented event filter_classes - Added content to challenges and challenge count to region - Added challenge and challenges blocks - Added Events and Event blocks - Added display count attribute to RelatedPosts block - Added support for media to Content block - Added support for video to Image class - Added short_description to SimpleItinerary - Added Listing Website Buttons for website and booking - Added Itineraries block - Added show/hide labels to map markers - Added address and image to marker infowindow - Added hover to map polygons and page nav onclick for polygons - Added Google Maps style option - Added Infowindow to map markers with linking pages - Added parent_slug to regions - Added related-posts with blockprops to all edit blocks - Added shortcodes for stripped markdown Changed - Removed lodash from externals so it works on front end - Moved maps const to inside jQuery init and set to window - Allowed toggling filter regions block by subregions if on region page - Unified itineraries block to filter by region and tags like listings block - Changed Image class to Media - Updated map boundsRef function to use boundaries or markers - Switched map labels to infoboxes Fixed - Fixed Itineraries block in single itinerary page - Fixed Media typo in Itinerary class - Fixed tag filter reset issue [1.5] - 2022-08-03 Added - Added image dimensions to image class - Added shortcode list page settings - Added Socials block - Added vendors to lib file and included in repo for class autoload - Added subtitle to title block - Added JSONMapper - Added filters for listing and region slugs - Added Yoast Support to Itinerator Pages - Added descriptionType to description block - Added custom template for additional-listings - Added missing itineraryScrollPosition - Added map JavaScript for mobile - Added regions rewrite Changed - Updated outdated templates - Removed unused components - Removed duplicate dependencies - Switched editor blocks to custom class - Updated node to 16, switched from npm to yarn - Removed dist from repo - Switched page meta form to React - Replaced single listing and region page to page meta - Updated Flickity settings - Moved to region/listing agnostic blocks - Moved amenities to separate block - Re-organized file structure - Major restructure of app, moved to samples in editor - Converted to Gutenberg block Fixed - Fixed filtering for listings and regions tagCategory - Fixed listings and regions block - Fixed script enque crashing widgets.php - Fixed bad call in Itinerary block - Fixed title attribute type incorrectly assigned boolean - Fixed jQuery and other includes to not use node_modules - Fixed Flickity issues - Fixed single listing issues

Last updated on Nov 06, 2025

README

Chatwoot Documentation Sync This directory contains the tools and documentation for syncing the Itinerator plugin's Markdown documentation to the Chatwoot Help Center. 📁 Files - sync-docs.js - Main sync script that processes markdown files and creates/updates articles in Chatwoot - README.md - This documentation file 🚀 Quick Start Prerequisites 1. Node.js (version 18+ recommended) 2. Configuration files in the project root: - docs-config.json - Chatwoot API configuration - docs-map.json - Article mapping file (auto-generated) Running the Sync # From the project root directory node docs/sync/sync-docs.js ⚙️ Configuration docs-config.json Structure { "chatwootBaseUrl": "https://chat.tourismo.co", "portalSlug": "wordpress-plugin-documentation", "apiToken": "your-api-token", "accountId": 1, "authorId": 14, "categories": { "collection-blocks": 7, "content-blocks": 8, "getting-started": 9, "general": 10 } } Required Configuration Values - chatwootBaseUrl: Your Chatwoot instance URL - portalSlug: The slug of your Help Center portal - apiToken: Your Chatwoot API token (use API-ACCESS-TOKEN header) - accountId: Your Chatwoot account ID - authorId: The ID of the user who will be listed as the article author - categories: Mapping of category slugs to their Chatwoot IDs 📋 How It Works Categorization Logic The sync script automatically categorizes articles based on their file path: - docs/user-guide/blocks/content-blocks/ → Content Blocks category - docs/user-guide/blocks/collection-blocks/ → Collection Blocks category - docs/user-guide/getting-started/ → Getting Started category - docs/user-guide/general/ → General category Meta Fields Generated For each article, the script generates: - Title: From front-matter title or generated from filename - Description: SEO-friendly description with category context - Meta Title: SEO-optimized page title - Meta Description: SEO description for search engines - Tags: Automatic tags based on file path and content type Front-matter Support You can override defaults using YAML front-matter in your markdown files: --- title: "Custom Title" description: "Custom description for the article" metaTitle: "Custom SEO Title" metaDescription: "Custom SEO description" tags: "custom, tags, here" --- 🔄 Sync Process 1. Scan: Recursively finds all .md files in the docs/ directory 2. Parse: Extracts front-matter and content from each file 3. Categorize: Determines category and generates metadata 4. Check: Looks up existing article in docs-map.json 5. Create/Update: - If article exists: Updates with PATCH request - If new article: Creates with POST request 6. Track: Updates docs-map.json with article mappings 📊 Output The script provides detailed progress information: 🚀 Starting enhanced Chatwoot docs sync... 📁 Found 25 markdown files 🆕 Creating: user-guide/blocks/content-blocks/title.md ✅ Created: user-guide/blocks/content-blocks/title.md (ID: 48) 📝 Updating: user-guide/blocks/content-blocks/description.md ✅ Updated: user-guide/blocks/content-blocks/description.md (ID: 49) 📊 Sync Summary: ✅ Created: 20 articles 📝 Updated: 5 articles ❌ Errors: 0 articles 💾 Updated docs-map.json with article mappings 📋 Category Distribution: - Content Blocks: 12 articles - Collection Blocks: 8 articles - Getting Started: 3 articles - General: 2 articles 🛠️ Troubleshooting Common Issues 401 Unauthorized Error - Check your API token in docs-config.json - Ensure token uses API-ACCESS-TOKEN header format - Verify token has proper permissions 404 Not Found Error - Check portalSlug in configuration - Verify portal exists in your Chatwoot instance - Ensure account ID is correct Category Not Found - Run the category setup script to create required categories - Check category IDs in docs-config.json Getting Help 1. Check the console output for specific error messages 2. Verify your docs-config.json settings 3. Test API access with a simple curl command: curl -H "API-ACCESS-TOKEN: your-token" \ https://chat.tourismo.co/api/v1/accounts/1/portals/wordpress-plugin-documentation/articles 🔧 Maintenance Regular Updates - Run the sync script whenever you update documentation - The script only updates changed files (based on docs-map.json) - New files are automatically detected and created Adding New Categories 1. Create the category in Chatwoot admin 2. Add the category mapping to docs-config.json 3. Update the categorization logic in sync-docs.js if needed Cleaning Up - The docs-map.json file tracks all synced articles - To remove an article from Chatwoot, delete it manually and remove the entry from docs-map.json 📝 Notes - Articles are created as "published" by default - The script preserves existing article IDs for updates - All articles include SEO-optimized meta fields - Tags provide virtual categorization beyond the main categories - The sync is idempotent - safe to run multiple times

Last updated on Sep 16, 2025