{"id":296124,"date":"2026-07-10T13:00:12","date_gmt":"2026-07-10T13:00:12","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/wsh-hotel-booking-management\/"},"modified":"2026-07-10T16:49:40","modified_gmt":"2026-07-10T16:49:40","slug":"wsh-hotel","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/wsh-hotel\/","author":23473330,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.53","stable_tag":"1.1.53","tested":"7.0.1","requires":"6.2","requires_php":"8.0","requires_plugins":null,"header_name":"WSH Hotel Booking Management","header_author":"CN Web-Style","header_description":"Simple room booking for WordPress and WooCommerce. Create room types, show availability and accept direct bookings and payment in WooCommerce.","assets_banners_color":"f4ece9","last_updated":"2026-07-10 16:49:40","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/web-style.dk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":32,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.1.53":{"tag":"1.1.53","author":"cnwebstyle","date":"2026-07-10 16:49:40"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3602830,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3602830,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3602830,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3602830,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.1.53"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3603196,"resolution":"1","location":"assets","locale":"","width":1600,"height":721},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3603196,"resolution":"2","location":"assets","locale":"","width":1600,"height":768},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3603196,"resolution":"3","location":"assets","locale":"","width":1600,"height":775},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3603196,"resolution":"4","location":"assets","locale":"","width":1108,"height":866},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3603196,"resolution":"5","location":"assets","locale":"","width":1116,"height":637}},"screenshots":{"1":"Plugin dashboard in WordPress admin.","2":"Setup wizard for creating the first bookable room.","3":"Bookings overview in WordPress admin.","4":"Single room page with booking form and availability details.","5":"Frontend search form with matching room results."}},"plugin_section":[],"plugin_tags":[13685,4486,1475,19356,286],"plugin_category":[45],"plugin_contributors":[270884],"plugin_business_model":[],"class_list":["post-296124","plugin","type-plugin","status-publish","hentry","plugin_tags-accommodation","plugin_tags-hotel-booking","plugin_tags-reservations","plugin_tags-room-booking","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-cnwebstyle","plugin_committers-cnwebstyle"],"banners":{"banner":"https:\/\/ps.w.org\/wsh-hotel\/assets\/banner-772x250.jpg?rev=3602830","banner_2x":"https:\/\/ps.w.org\/wsh-hotel\/assets\/banner-1544x500.jpg?rev=3602830","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wsh-hotel\/assets\/icon-128x128.png?rev=3602830","icon_2x":"https:\/\/ps.w.org\/wsh-hotel\/assets\/icon-256x256.png?rev=3602830","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wsh-hotel\/assets\/screenshot-1.png?rev=3603196","caption":"Plugin dashboard in WordPress admin."},{"src":"https:\/\/ps.w.org\/wsh-hotel\/assets\/screenshot-2.png?rev=3603196","caption":"Setup wizard for creating the first bookable room."},{"src":"https:\/\/ps.w.org\/wsh-hotel\/assets\/screenshot-3.png?rev=3603196","caption":"Bookings overview in WordPress admin."},{"src":"https:\/\/ps.w.org\/wsh-hotel\/assets\/screenshot-4.png?rev=3603196","caption":"Single room page with booking form and availability details."},{"src":"https:\/\/ps.w.org\/wsh-hotel\/assets\/screenshot-5.png?rev=3603196","caption":"Frontend search form with matching room results."}],"raw_content":"<!--section=description-->\n<p>WSH Hotel Booking Management is a free hotel booking plugin for WordPress websites that use WooCommerce for checkout.<\/p>\n\n<p>The free version is focused on a simple booking flow:<\/p>\n\n<ul>\n<li>create room types<\/li>\n<li>show room pages and room overviews<\/li>\n<li>search by check-in, check-out and guests<\/li>\n<li>display available rooms<\/li>\n<li>send bookings to WooCommerce cart and checkout<\/li>\n<li>manage reservations from WordPress admin<\/li>\n<li>use a booking calendar and a guided setup wizard<\/li>\n<\/ul>\n\n<p>The plugin is suitable for hotels, guesthouses, apartments and similar accommodation websites that need a lightweight direct-booking setup.<\/p>\n\n<p>The free plugin does not require any paid activation step.<\/p>\n\n<h4>Core features<\/h4>\n\n<ul>\n<li>Room Types as native WordPress content<\/li>\n<li>Search form with check-in, check-out and guests<\/li>\n<li>Room grid overview shortcode<\/li>\n<li>Single room pages<\/li>\n<li>Availability-aware booking flow<\/li>\n<li>Booking calendar in admin<\/li>\n<li>Reservation overview in admin<\/li>\n<li>Guided setup wizard for first-time setup<\/li>\n<li>WooCommerce cart and checkout integration<\/li>\n<li>Temporary cart hold support<\/li>\n<li>Basic room gallery support<\/li>\n<\/ul>\n\n<h4>Optional Pro add-on<\/h4>\n\n<p>WSH Hotel Free works as a complete free booking engine without a license key or paid activation step.<\/p>\n\n<p>A separate Pro add-on can be used when a site needs advanced hotel tools such as rate plans, seasonal price rules, add-ons and expanded guest management. Pro functionality is not locked inside the Free plugin.<\/p>\n\n<h4>WooCommerce integration<\/h4>\n\n<p>WooCommerce is required for cart, checkout and payment handling.<\/p>\n\n<p>The plugin stores booking data in its own WordPress database tables and links completed bookings to WooCommerce orders. WooCommerce handles checkout, payment and order storage.<\/p>\n\n<h4>Data and uninstall behavior<\/h4>\n\n<p>When the plugin is uninstalled, plugin-owned database tables, settings and scheduled cleanup events are removed.<\/p>\n\n<p>Room Type posts are user-created WordPress content and are preserved. WooCommerce orders remain under WooCommerce's control.<\/p>\n\n<h4>Bundled assets<\/h4>\n\n<p>All bundled images and visual assets are original WebStyle assets and are distributed with the plugin under the plugin license.<\/p>\n\n<h4>Shortcodes<\/h4>\n\n<p>Use these shortcodes on your pages:<\/p>\n\n<ul>\n<li><code>[cnwshotel_search]<\/code> - room search form<\/li>\n<li><code>[cnwshotel_room_results]<\/code> - filtered room results after search<\/li>\n<li><code>[cnwshotel_rooms]<\/code> - all-room overview grid<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/wsh-hotel\/<\/code> directory, or install the plugin through the WordPress Plugins screen.<\/li>\n<li>Activate the plugin through the Plugins screen in WordPress.<\/li>\n<li>Make sure WooCommerce is installed and activated.<\/li>\n<li>Open Hotel Booking in WordPress admin.<\/li>\n<li>Run the setup wizard or create your first room type manually.<\/li>\n<li>Add the shortcodes to your booking page.<\/li>\n<li>Test the booking flow before accepting live bookings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20woocommerce%3F\"><h3>Do I need WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. WooCommerce is required for cart, checkout and payment handling.<\/p><\/dd>\n<dt id=\"is%20the%20free%20plugin%20usable%20without%20a%20paid%20activation%20step%3F\"><h3>Is the free plugin usable without a paid activation step?<\/h3><\/dt>\n<dd><p>Yes. The free plugin works without a paid activation step.<\/p><\/dd>\n<dt id=\"can%20i%20translate%20the%20plugin%3F\"><h3>Can I translate the plugin?<\/h3><\/dt>\n<dd><p>Yes. The plugin uses the <code>wsh-hotel<\/code> text domain and includes translation files in the <code>languages<\/code> folder.<\/p><\/dd>\n<dt id=\"can%20i%20accept%20payment%20in%20woocommerce%2C%20with%20this%20plugin%3F\"><h3>Can I accept payment in WooCommerce, with this plugin?<\/h3><\/dt>\n<dd><p>Yes. You can use whatever you want in your WooCommerce setup to receive payment for the booking.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.53<\/h4>\n\n<ul>\n<li>Synced internal WooCommerce order item booking status meta with booking status changes.<\/li>\n<li>Made the no-availability room result state visible on the frontend.<\/li>\n<li>Documented bundled asset licensing for WordPress.org review.<\/li>\n<li>Cleaned release formatting and readability without changing booking behavior.<\/li>\n<\/ul>\n\n<h4>1.1.52<\/h4>\n\n<ul>\n<li>Preserved user-created Room Type posts during uninstall while keeping plugin table, option and scheduled event cleanup.<\/li>\n<li>Declared WooCommerce HPOS and Cart\/Checkout Blocks compatibility from the main plugin file.<\/li>\n<li>Limited room-grid custom table reads to the requested room post IDs.<\/li>\n<li>Aligned the PHP compatibility test target with the plugin's declared PHP 8.0 minimum.<\/li>\n<\/ul>\n\n<h4>1.1.51<\/h4>\n\n<ul>\n<li>Hardened admin-post setup and booking actions with explicit capability checks and WordPress nonce verification before submitted fields are read.<\/li>\n<li>Split request verification from input sanitization for setup, room save and booking admin flows.<\/li>\n<li>Replaced unsafe raw request filters with explicit sanitizing filters and cleaned source text encoding.<\/li>\n<\/ul>\n\n<h4>1.1.46<\/h4>\n\n<ul>\n<li>Final package audit release after the WordPress.org compliance refactor.<\/li>\n<li>Kept the stable booking, cart and WooCommerce checkout block flow from 1.1.44.<\/li>\n<li>Verified the free package remains free of license checks, external updater code and bundled Pro functionality.<\/li>\n<\/ul>\n\n<h4>1.1.44<\/h4>\n\n<ul>\n<li>Prevented checkout\/store-api processing from requiring the original room booking nonce.<\/li>\n<li>Kept booking nonce validation scoped to the actual single-room booking form.<\/li>\n<li>Replaced the transaction SQL wrapper with fixed internal transaction statements to avoid variable SQL while keeping booking allocation transactions intact.<\/li>\n<\/ul>\n\n<h4>1.1.38<\/h4>\n\n<ul>\n<li>Fixed frontend booking nonce verification by preserving uppercase server keys such as REQUEST_METHOD in the typed request helper.<\/li>\n<\/ul>\n\n<h4>1.1.32<\/h4>\n\n<ul>\n<li>Centralized prepared custom-table reads behind a controlled DB helper.<\/li>\n<li>Reduced business-code SQL suppressions and added cache keys for stable bulk lookups.<\/li>\n<li>Tightened request helper sanitization so dynamic fields are unslashed and sanitized at read time.<\/li>\n<\/ul>\n\n<h4>1.1.29<\/h4>\n\n<ul>\n<li>Internal SQL helper cleanup for sanitized IN() queries in availability and room result lookups.<\/li>\n<li>Request helper now sanitizes scalar and array values at the source before validation.<\/li>\n<li>Kept Pro awareness visuals while keeping Free free of Pro functionality, license checks and updater code.<\/li>\n<\/ul>\n\n<h4>1.1.25<\/h4>\n\n<ul>\n<li>Moved cart-hold cleanup scheduling to activation\/cron instead of request-time cleanup checks.<\/li>\n<li>Reduced booking availability query load with per-request unit capacity caching and bulk minimum-stay lookup.<\/li>\n<li>Added composite database indexes for date\/status availability lookups on bookings, room units, pricing rules and cart holds.<\/li>\n<li>Optimized WooCommerce order status sync to update matching bookings in one operation and clear affected availability caches.<\/li>\n<li>Added frontend room-grid query flags to avoid unnecessary result counts and taxonomy cache work.<\/li>\n<\/ul>\n\n<h4>1.1.24<\/h4>\n\n<ul>\n<li>Restored a contextual Pro information screen with visual feature cards and Free vs Pro comparison, without adding Pro feature code, license handling or updater logic to the Free plugin.<\/li>\n<\/ul>\n\n<h4>1.1.23<\/h4>\n\n<ul>\n<li>Added contextual Free\/Pro information for administrators without including locked Pro functionality in the Free plugin.<\/li>\n<\/ul>\n\n<h4>1.1.22<\/h4>\n\n<ul>\n<li>Removed unused upgrade\/promotional admin page code and related image assets from the free package.<\/li>\n<li>Moved frontend booking summary and gallery media labels into localized script data.<\/li>\n<li>Removed hardcoded user-facing strings from the bundled JavaScript fallbacks.<\/li>\n<li>Replaced room editor promotional tab with free-core room settings only.<\/li>\n<li>Aligned the free request layer with field-specific GET\/POST readers and removed GET\/POST merge usage from booking flow.<\/li>\n<li>Added explicit POST nonce verification helpers for data-changing handlers.<\/li>\n<li>Improved frontend search availability by passing bulk availability counts into room cards.<\/li>\n<li>Tightened WooCommerce booking payload handling to read only validated POST fields after nonce verification.<\/li>\n<li>Added Woo room-product gating and per-request caches to reduce custom table lookups in cart and checkout hooks.<\/li>\n<\/ul>\n\n<h4>1.1.19<\/h4>\n\n<ul>\n<li>Refactored request input handling to use field-specific reads instead of broad raw GET\/POST array reads.<\/li>\n<li>Added frontend search nonce support for search forms and room links.<\/li>\n<li>Hardened admin POST handlers to read sanitized typed values after nonce\/capability checks.<\/li>\n<li>Improved room result performance by resolving room rows and date availability in grouped queries.<\/li>\n<li>Reduced repeated WooCommerce room-product lookups with product meta markers and per-request cache.<\/li>\n<\/ul>\n\n<h4>1.1.18<\/h4>\n\n<ul>\n<li>Fixes booking admin unit-availability SQL prepare argument order so dates cannot be treated as table identifiers when editing booking status or unit assignment.<\/li>\n<li>Keeps cancelled bookings visible in booking history while preventing admin database output\/warnings.<\/li>\n<\/ul>\n\n<h4>1.1.16<\/h4>\n\n<ul>\n<li>Changed main admin menu target so Hotel Booking opens the Dashboard first.<\/li>\n<li>Polished admin shell alignment so the top navigation reaches the left edge of the plugin content area.<\/li>\n<li>Rechecked PHP templates for inline CSS and JavaScript.<\/li>\n<\/ul>\n\n<h4>1.1.15<\/h4>\n\n<ul>\n<li>Finalized uninstall cleanup for the current cnwshotel database structure only.<\/li>\n<li>Removed old development\/test table cleanup from the WordPress.org-ready free package.<\/li>\n<li>Reconfirmed that installer and uninstall use the same current table prefix.<\/li>\n<\/ul>\n\n<h4>1.1.13<\/h4>\n\n<ul>\n<li>Switched the Free settings form to the WordPress Settings API.<\/li>\n<li>Replaced broad raw request reads with field-specific request helpers, nonce\/capability guarded admin handlers, and stricter validation.<\/li>\n<li>Rechecked nonce and capability protection for admin-post actions, room saves and settings.<\/li>\n<li>Reconfirmed cnwshotel prefix usage for classes, options, hooks, handles, custom tables, CSS classes and shortcodes.<\/li>\n<\/ul>\n\n<h4>1.1.12<\/h4>\n\n<ul>\n<li>Removed the remaining internal public booking-page legacy slug handling.<\/li>\n<li>Kept the setup wizard public booking page on <code>\/room\/<\/code> with <code>[cnwshotel_search]<\/code> and <code>[cnwshotel_room_results]<\/code>.<\/li>\n<li>Removed unused legacy frontend template files that are not loaded by the current Free runtime.<\/li>\n<li>Limited frontend CSS\/JS loading to booking pages, room pages, shortcode pages and WooCommerce cart\/checkout where relevant.<\/li>\n<\/ul>\n\n<h4>1.1.11<\/h4>\n\n<ul>\n<li>Set the public booking\/search page slug to <code>\/room\/<\/code> when created by the setup wizard.<\/li>\n<li>Updated search and room-page fallbacks to use <code>\/room\/<\/code> instead of internal plugin naming.<\/li>\n<\/ul>\n\n<h4>1.1.10<\/h4>\n\n<ul>\n<li>Aligned booking result pages to use <code>[cnwshotel_room_results]<\/code>.<\/li>\n<li>Kept <code>[cnwshotel_rooms]<\/code> as the all-room overview shortcode.<\/li>\n<\/ul>\n\n<h4>1.1.9<\/h4>\n\n<ul>\n<li>Migrated the free plugin foundation to the cnwshotel prefix standard for classes, constants, options, tables, hooks, assets and shortcodes.<\/li>\n<li>Added a central frontend request parser and removed direct request parsing from room templates.<\/li>\n<li>Fixed setup wizard room intro handling so the same short description is not displayed twice on single room pages.<\/li>\n<li>Renamed frontend and admin assets to the cnwshotel handle\/file structure.<\/li>\n<\/ul>\n\n<h4>1.1.6<\/h4>\n\n<ul>\n<li>Renamed the plugin package folder to <code>wsh-hotel<\/code> for a clean WordPress.org package structure.<\/li>\n<li>Strengthened uninstall cleanup for plugin database tables.<\/li>\n<li>Removed PHP closing tags from templates to reduce activation-output risk.<\/li>\n<li>Tightened database identifier handling for WordPress 6.2+ SQL preparation.<\/li>\n<\/ul>\n\n<h4>1.1.5<\/h4>\n\n<ul>\n<li><p>Cleaned the free plugin package for WordPress.org.<\/p><\/li>\n<li><p>Simplified the free booking flow to check-in, check-out and guests.<\/p><\/li>\n<li><p>Added guided setup wizard and improved free admin UI.<\/p><\/li>\n<li><p>Cleaned activation and database upgrade handling.<\/p><\/li>\n<li><p>Improved admin menu, calendar landing page and release readiness.<\/p><\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Simple room booking for WordPress and WooCommerce. Create room types, show availability and accept direct bookings.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/296124","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=296124"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cnwebstyle"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=296124"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=296124"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=296124"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=296124"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=296124"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=296124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}