Zihad Travel CMS self-updates
Complete Visa & Tour CMS for WordPress
★ 0stars
0forks
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/ridoy-rock/zihad-travel-cms/archive/refs/heads/main.zipShips its own WordPress updater (Update URI header), so new versions show up under Dashboard → Updates.
A commercial-grade WordPress Travel CMS plugin for travel agencies. Manage Countries, Visas and Tours with professional tabbed editors, a themeable Bootstrap 5 frontend, AJAX search, Elementor widgets and dynamic tags, a generic import/export engine, and installable bilingual (English/Bangla) demo data.
Development status: pre-release. See PROJECT_STATUS.md and ROADMAP.md.
Features
- Three content types — Countries (destination guides), Visas (services with requirements, documents, application process), Tours (packages with itinerary, pricing, hotels, gallery) — plus Visa Type, Tour Type and Region taxonomies. Every field is registered post meta: typed, sanitized and REST-exposed (Gutenberg / Elementor / headless ready).
- Professional admin editors — reusable tabbed editor framework (WAI-ARIA tabs, 19 field components incl. repeaters, FAQ/timeline builders, media/gallery pickers) with guarded save pipelines and cross-field validation. No default metaboxes, no duplicated UI.
- Frontend engine — MVC template loader with archive + single templates
for all three types, fully theme-overridable
(
{theme}/zihad-travel-cms/frontend/…); mobile-first CSS; FAQ accordions with FAQPage JSON-LD; SEO-friendly URLs (/tour/,/visa/,/country/,/visa-type/,/tour-type/,/region/). - AJAX search & filters — public, cacheable REST endpoint
(
GET ztc/v1/search) with keyword, region, type, country, price, duration and budget filters; progressive enhancement (works without JavaScript — archive URLs filter server-side). - Homepage search widget — tabbed Visa (Country, Visa Type) / Tour (Country, Tour Type, Duration, Budget) search with CSS-only tabs; one shared render path for the shortcode, the Elementor widget and the optional homepage auto-injection.
- Booking / inquiries — visa & tour inquiry forms on the single pages
(plus shortcode/Elementor placements) feeding a private Inquiries screen;
works without JavaScript, honeypot + rate-limit protected; email
notifications through a swappable mail abstraction (
ztc_mailer). - Elementor — "Travel CMS" widget category (Tours/Visas/Countries grids, CTA, Travel Search, Inquiry Form) and dynamic tags (post fields, hero image, global settings).
- Shortcodes —
[ztc_tours],[ztc_visas],[ztc_countries],[ztc_search],[ztc_search_widget],[ztc_inquiry_form],[ztc_cta]. - Import / Export — generic CSV/JSON engine with batched jobs, live progress, resume, error logs, duplicate detection (create/update/upsert), rollback, and image sideloading from URLs. REST + WP-CLI + admin UI. Extensible: any module can register an import mapping.
- Demo data — deterministic generator (105 countries, 473 visas, 132 tours) built from data files with full Bangla support; installs through the importer, re-installs update instead of duplicating.
- SEO — meta title/description/keywords, canonical URLs, robots
directives, OpenGraph, Twitter Cards and Schema.org JSON-LD
(TouristTrip, GovernmentService, Country, BreadcrumbList, FAQPage) with
per-post overrides and global defaults; automatically defers to
Yoast SEO / Rank Math; every output filterable (
ztc_seo_*). - Setup wizard — eleven-step first-run installer (resumable, skippable, no-JS capable, REST-driven) that writes through the normal settings pipeline and installs demo data via the import engine; re-runnable from Travel CMS → Setup.
- Settings & dashboard — 12-tab settings screen (branding, contact, WhatsApp, Maps/Analytics/Pixel, booking, performance, custom CSS/JS), REST settings API, dashboard widgets (content counts, demo status, recent imports), floating WhatsApp button, brand-color CSS variables.
- Engineering — PSR-4 + DI container, service providers, module system,
WP-CLI commands, version-keyed upgrade migrations, opt-in uninstall
cleanup, translation-ready (
wpml-config.xml, Bangla-first demo data).
Requirements
| Requirement | Version |
|---|---|
| PHP | 8.2+ |
| WordPress | 6.4+ |
| Elementor (optional) | 3.x — only for the Elementor widgets/tags |
| Permalinks | "Pretty" permalinks required for /tour/ etc. |
Installation
- Copy (or clone) the plugin into
wp-content/plugins/zihad-travel-cms. - (Optional, dev)
composer install— the plugin ships a PSR-4 fallback autoloader, so Composer is not required at runtime. - Activate Zihad Travel CMS on the Plugins screen.
- The Setup Wizard opens automatically — company info, branding, contact channels, tracking and optional demo data in eleven guided, skippable steps (re-run anytime from Travel CMS → Setup).
- Fine-tune under Travel CMS → Settings; check Travel CMS → Health.
- Demo content (if not installed during setup): Travel CMS →
Import / Export → Demo Data → Install, or
wp ztc demo install.
Folder Structure
zihad-travel-cms/
├── zihad-travel-cms.php Bootstrap: constants, requirements guard, autoload, hooks
├── uninstall.php Opt-in data cleanup (multisite-aware)
├── composer.json PSR-4: ZihadTravelCMS\ → includes/
├── phpcs.xml.dist WordPress Coding Standards ruleset
├── wpml-config.xml Multilingual field semantics (WPML/Polylang)
├── assets/ css/, js/ (admin + frontend), images/, vendor/bootstrap/
├── demo-data/ Generated demo JSON + sources/ (seeds & templates)
├── docs/ Per-module developer documentation
├── includes/ All PHP (PSR-4 root)
│ ├── Plugin.php Kernel (DI container + service providers)
│ ├── Core/ Container, Config, Assets, Upgrade, lifecycle
│ ├── Contracts/ Registrable, Module, ImportMapping, TranslationProvider
│ ├── Admin/ Menu, dashboard, pages (Settings, Health, Import/Export)
│ │ └── UI/ Tabbed editor framework + 19 field components
│ ├── Frontend/ TemplateLoader, Shortcodes, Integrations
│ ├── Views/ GridRenderer + card components
│ ├── Data/ BaseRepository
│ ├── PostTypes/ Taxonomies/ Declarative registration bases
│ ├── RestApi/ Settings/ Services/ Helpers/ Translations/
│ └── Modules/ Country, Visa, Tour, Search, Importer, DemoData,
│ Elementor + placeholders (Booking, Seo, Ai, Analytics)
├── templates/ Pure views: admin/, frontend/ (theme-overridable), cards/
└── languages/ zihad-travel-cms.pot
Development Setup
git clone <repo> wp-content/plugins/zihad-travel-cms
cd wp-content/plugins/zihad-travel-cms
composer install # dev tools: PHPCS/WPCS, PHPCompatibility, PHPStan
composer lint # WordPress Coding Standards
composer stan # PHPStan level 5
composer test # all smoke suites (tests/run.sh)
composer build:wporg # WordPress.org zip (Update URI stripped, channel gate)
composer build:pro # self-hosted/development zip (identical to the source tree)
- Tests: standalone smoke suites in tests/ (WordPress-function stubs — no WP install needed); CI runs them on PHP 8.2/8.3 plus PHPCS and PHPStan on every push. See CONTRIBUTING.md.
- WP-CLI:
wp ztc import|export|import-status|import-rollback,wp ztc demo generate|install. - Docs: start with ARCHITECTURE.md, then the per-module docs in docs/.
License
GPL-2.0-or-later.