{"id":374633,"date":"2026-09-28T06:32:17","date_gmt":"2026-09-28T06:32:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/elita-tour-core\/"},"modified":"2026-09-28T06:31:50","modified_gmt":"2026-09-28T06:31:50","slug":"wha-tours-core","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wha-tours-core\/","author":17023835,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"WHA Tours Core","header_author":"Web Help Agency","header_description":"Companion plugin for the WHA Tour Poster theme: tour post type, tour taxonomies, tour meta fields and the lead request form (shortcode and block).","assets_banners_color":"","last_updated":"2026-09-28 06:31:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/webhelpagency.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":40,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"webhelpagency","date":"2026-09-28 06:31:50","revision":3716395}},"upgrade_notice":{"1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"wha-tours-core\/lead-form":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"wha-tours-core\/lead-form","version":"1.0.0","title":"Lead form","category":"widgets","icon":"email-alt","description":"Request form: name, phone and comment. Submissions are emailed and stored in Leads.","keywords":["form","lead","contact","request"],"textdomain":"wha-tours-core","supports":{"html":false,"multiple":true,"align":["wide","full"]},"attributes":{"button":{"type":"string","default":""},"note":{"type":"string","default":""}},"editorScript":"wha-tours-core-lead-form-editor","style":"wha-tours-core"}},"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3716395,"resolution":"1","location":"assets","locale":"","width":1280,"height":750},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3716395,"resolution":"2","location":"assets","locale":"","width":1280,"height":620}},"screenshots":{"1":"The tour edit screen with the tour details fields.","2":"The lead form on the front end."}},"plugin_section":[],"plugin_tags":[1220,1794,19527,17227,249],"plugin_category":[39],"plugin_contributors":[170188],"plugin_business_model":[],"class_list":["post-374633","plugin","type-plugin","status-publish","hentry","plugin_tags-block","plugin_tags-custom-post-type","plugin_tags-lead-form","plugin_tags-tours","plugin_tags-travel","plugin_category-business","plugin_contributors-webhelpagency","plugin_committers-webhelpagency"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/wha-tours-core.svg","icon_2x":false,"generated":true},"screenshots":[{"src":"https:\/\/ps.w.org\/wha-tours-core\/assets\/screenshot-1.jpg?rev=3716395","caption":"The tour edit screen with the tour details fields."},{"src":"https:\/\/ps.w.org\/wha-tours-core\/assets\/screenshot-2.jpg?rev=3716395","caption":"The lead form on the front end."}],"raw_content":"<!--section=description-->\n<p>WHA Tours Core keeps the content structure of a tour operator site in a plugin, so it survives a theme switch, as required by the WordPress.org theme guidelines.<\/p>\n\n<p>The plugin registers:<\/p>\n\n<ul>\n<li>The <strong>Tour<\/strong> post type (archive at <code>\/tours\/<\/code>, single tours at <code>\/tour\/&lt;slug&gt;\/<\/code>), with title, editor, excerpt, featured image and revisions, available in the block editor and the REST API.<\/li>\n<li>Three taxonomies: <strong>Tour Categories<\/strong> (hierarchical), <strong>Seasons<\/strong> and <strong>Countries<\/strong>.<\/li>\n<li>Tour fields: days, transport, price, route stops, departure dates with availability status, and a \"season hit\" flag. The next departure date is computed automatically and used for sorting.<\/li>\n<li>Category fields: image, short description and a colour key. Seasons have a sort order.<\/li>\n<li>A <strong>demo content importer<\/strong> under Tours \u2192 Import demo content (and <code>wp wha-tours demo import<\/code>), which fills a fresh site with a sample catalogue: four categories, four seasons, eleven countries, twelve tours with CC0 photographs, four pages, two menus, the Customizer settings of the WHA Tour Poster theme and the Reading settings. It never overwrites existing content and creates no duplicates when it is run twice.<\/li>\n<li>A <strong>lead form<\/strong> as the <code>[wha_tours_lead_form]<\/code> shortcode and as the <em>Lead form<\/em> block. Submissions are checked against a nonce, a honeypot field and a one-minute-per-IP rate limit, emailed to the site administrator and stored as private <strong>Leads<\/strong> entries in the admin.<\/li>\n<\/ul>\n\n<p>Template helpers for theme authors: <code>wha_tours_core_get_meta()<\/code>, <code>wha_tours_core_get_tours()<\/code>, <code>wha_tours_core_get_term_image_id()<\/code>, <code>wha_tours_core_next_date()<\/code>, <code>wha_tours_core_format_dates()<\/code>, <code>wha_tours_core_transport_label()<\/code>, <code>wha_tours_core_transport_icon()<\/code>, <code>wha_tours_core_category_color()<\/code> and <code>wha_tours_core_price_label()<\/code>.<\/p>\n\n<h3>Developer notes<\/h3>\n\n<ul>\n<li><strong>Meta key prefix.<\/strong> All tour and term meta registered by the plugin uses the <code>_wha_tour_<\/code> prefix\n(<code>_wha_tour_days<\/code>, <code>_wha_tour_transport<\/code>, <code>_wha_tour_price<\/code>, <code>_wha_tour_route<\/code>,\n  _wha_tour_dates, <code>_wha_tour_hit<\/code>, <code>_wha_tour_next_departure<\/code>, <code>_wha_tour_image<\/code>,\n  _wha_tour_image_id,\n  _wha_tour_short_desc, <code>_wha_tour_color<\/code>, <code>_wha_tour_order<\/code>). That prefix is shared with the\nWHA Tour Poster theme, which reads the same keys directly when it renders poster cards and season tabs, so\nrenaming a key here breaks the theme templates. The lead entries use <code>_wha_tours_core_lead_*<\/code>\ninstead, because nothing outside this plugin reads them.<\/li>\n<li><strong>Lead post type.<\/strong> Submitted requests are stored in the <code>wha_tours_lead<\/code> post type. WordPress limits a\npost type name to 20 characters, so the name cannot carry the full <code>wha_tours_core_<\/code> prefix;\n  wha_tours_lead is the prefixed short form and is registered private, with no public archive.<\/li>\n<\/ul>\n\n<h3>Resources<\/h3>\n\n<ul>\n<li>CMB2 v2.13.0 \u2014 https:\/\/github.com\/CMB2\/CMB2 \u2014 GPL-2.0-or-later, bundled in <code>vendor\/cmb2\/cmb2<\/code>,\nunmodified, except that three groups of files it does not need here are left out of the package:<\/li>\n<\/ul>\n\n<ol>\n<li>The wp-color-picker-alpha files (<code>js\/wp-color-picker-alpha.js<\/code> and\njs\/wp-color-picker-alpha.min.js). CMB2 only registers that script for <code>colorpicker<\/code> fields, which\nthis plugin does not use, and the plugin additionally removes the <code>wp-color-picker-alpha<\/code> handle\nthrough the <code>cmb2_script_dependencies<\/code> filter.<\/li>\n<li>jQuery UI Timepicker Addon (<code>js\/jquery-ui-timepicker-addon.min.js<\/code>, v1.5.0), which CMB2 registers\nas <code>jquery-ui-datetimepicker<\/code> for the <code>text_time<\/code> and <code>text_datetime_timestamp<\/code> field types. This\nplugin only uses <code>text_date<\/code>, and the same filter removes that handle too.<\/li>\n<li>CMB2's own translation files (<code>languages\/<\/code>). They belong to the <code>cmb2<\/code> text domain, not to this\nplugin, and WordPress loads them from translate.wordpress.org wherever CMB2 is installed as a\nplugin of its own.<\/li>\n<\/ol>\n\n<p>Demo content photographs, bundled in <code>demo\/images\/<\/code> and imported by Tours \u2192 Import demo content.\nAll of them come from Wikimedia Commons and are released under CC0 1.0 Universal (public domain\ndedication), https:\/\/creativecommons.org\/publicdomain\/zero\/1.0\/. They were re-encoded as JPEG with\na long edge of at most 1280 pixels; the same list is repeated in <code>demo\/images\/CREDITS.txt<\/code>.<\/p>\n\n<ul>\n<li><code>demo\/images\/beach-deckchair.jpg<\/code> \u2014 File:Liegestuhl Strand Uwe (183891951).jpeg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Liegestuhl_Strand_Uwe_(183891951).jpeg \u2014 Uwe Jelting \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/prague-castle.jpg<\/code> \u2014 File:Prague Castle at Night viewed from Charles Bridge.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Prague_Castle_at_Night_viewed_from_Charles_Bridge.jpg \u2014 Lucas Garron \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/carpathians.jpg<\/code> \u2014 File:\u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0456 \u043a\u0430\u0440\u043f\u0430\u0442\u0438.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:%D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D1%81%D1%8C%D0%BA%D1%96_%D0%BA%D0%B0%D1%80%D0%BF%D0%B0%D1%82%D0%B8.jpg \u2014 Slaydoggy \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/lake-bled.jpg<\/code> \u2014 File:Lake Bled, Slovenia (28439609952).jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Lake_Bled,<em>Slovenia<\/em>(28439609952).jpg \u2014 Dimitry Anikin \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/eiffel-tower.jpg<\/code> \u2014 File:Eiffel Tower, Paris 12 June 2023.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Eiffel_Tower,_Paris_12_June_2023.jpg \u2014 Pierre Blach\u00e9 \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/budapest-chain-bridge.jpg<\/code> \u2014 File:Sz\u00e9chenyi Chain Bridge in Budapest at night.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Sz%C3%A9chenyi_Chain_Bridge_in_Budapest_at_night.jpg \u2014 Wilfredor \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/synevyr-lake.jpg<\/code> \u2014 File:Transkarpaten Ukraine Synevyr - 2.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Transkarpaten_Ukraine_Synevyr_-_2.jpg \u2014 Bikerjimi \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/danube-budapest.jpg<\/code> \u2014 File:Danube, Budapest 20250628 160606.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Danube,_Budapest_20250628_160606.jpg \u2014 Vauia Rex \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/krakow-old-town.jpg<\/code> \u2014 File:Horse carriages in Krakow Old Town Square.JPG \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Horse_carriages_in_Krakow_Old_Town_Square.JPG \u2014 Rudolph.A.Furtado \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/dresden.jpg<\/code> \u2014 File:Dresden, Ernemannturm (Juni 2026) 4.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Dresden,<em>Ernemannturm<\/em>(Juni_2026)_4.jpg \u2014 Romzig \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/vienna.jpg<\/code> \u2014 File:Statue Eugenio of Savoy Heldenplatz Vienna Austria.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Statue_Eugenio_of_Savoy_Heldenplatz_Vienna_Austria.jpg \u2014 Jebulon \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/kamianets-podilskyi-castle.jpg<\/code> \u2014 File:Bridge to Kamyanets Podilsky Castle.jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Bridge_to_Kamyanets_Podilsky_Castle.jpg \u2014 Brian Dell \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/bran-castle.jpg<\/code> \u2014 File:Bran Castle - Castelul Bran.JPG \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Bran_Castle_-_Castelul_Bran.JPG \u2014 Calatorinlume \u2014 CC0 1.0<\/li>\n<li><code>demo\/images\/monaco.jpg<\/code> \u2014 File:Spring time in Monte Carlo, Monaco (Unsplash).jpg \u2014 https:\/\/commons.wikimedia.org\/wiki\/File:Spring_time_in_Monte_Carlo,<em>Monaco<\/em>(Unsplash).jpg \u2014 Nick Karvounis \u2014 CC0 1.0<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>wha-tours-core<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin through the Plugins screen.<\/li>\n<li>Activate the plugin through the Plugins screen. The permalinks are refreshed automatically on activation.<\/li>\n<li>On a fresh site, go to <strong>Tours \u2192 Import demo content<\/strong> to fill it with the sample catalogue, or run <code>wp wha-tours demo import<\/code>.<\/li>\n<li>Add tours under <strong>Tours<\/strong>, and place the <em>Lead form<\/em> block or the <code>[wha_tours_lead_form]<\/code> shortcode on your contact page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20the%20submitted%20requests%20go%3F\"><h3>Where do the submitted requests go?<\/h3><\/dt>\n<dd><p>Each request is emailed to the address in Settings \u2192 General (filterable with <code>wha_tours_core_lead_recipient<\/code>) and stored as a private entry under Tours \u2192 Leads, visible to administrators only.<\/p><\/dd>\n<dt id=\"does%20uninstalling%20delete%20my%20tours%3F\"><h3>Does uninstalling delete my tours?<\/h3><\/dt>\n<dd><p>No. Uninstalling removes only the options and transients created by the plugin. Tours, terms, tour meta and stored leads are kept.<\/p><\/dd>\n<dt id=\"what%20does%20the%20demo%20import%20change%20on%20a%20site%20that%20is%20already%20in%20use%3F\"><h3>What does the demo import change on a site that is already in use?<\/h3><\/dt>\n<dd><p>Nothing that exists. Every tour, term, page and image it creates is tagged with the <code>_wha_tours_core_demo<\/code> meta key and skipped on the next run. Menus are only created for theme locations that have no menu yet, Customizer settings are only written when the WHA Tour Poster theme is active and the setting is still empty, and the Reading settings are only changed while the front page still shows the latest posts.<\/p><\/dd>\n<dt id=\"which%20filters%20and%20actions%20are%20available%3F\"><h3>Which filters and actions are available?<\/h3><\/dt>\n<dd><p>wha_tours_core_get_tours_args filters the query arguments, <code>wha_tours_core_lead_recipient<\/code> filters the notification address and <code>wha_tours_core_lead_submitted<\/code> fires after a request was stored.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: Tour post type, tour taxonomies and meta, lead form shortcode and block, demo content importer.<\/li>\n<\/ul>","raw_excerpt":"Companion plugin for the WHA Tour Poster theme: the Tour post type, its taxonomies and meta fields, and the lead request form.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/374633","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=374633"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/webhelpagency"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=374633"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=374633"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=374633"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=374633"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=374633"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=374633"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}