# WP BnB Management A comprehensive Bed & Breakfast management system for WordPress. Manage buildings, rooms, bookings, and guests all within your WordPress admin. ## Description WP BnB Management enables WordPress to act as a full management system for B&B hosts. It handles multiple buildings with multiple rooms each, bookings, and guest data required for room rentals. ### Key Features - **Multi-Property Support**: Manage multiple buildings, each with multiple rooms - **Flexible Pricing**: Configure short-term (nights), mid-term (weeks), and long-term (months) pricing - **Seasonal Pricing**: Set price modifiers for high/low seasons - **Booking Management**: Track reservations from inquiry to checkout - **Guest Management**: Store guest information securely with GDPR compliance - **Data Encryption**: Sensitive guest data (ID/passport) encrypted at rest - **Additional Services**: Offer extras like breakfast, parking, or tours - **Frontend Integration**: Gutenberg blocks, widgets, and shortcodes - **Auto-Updates**: Automatic update checks and installation from license server - **Development Mode**: License bypass for local development environments - **Contact Form 7 Integration**: Accept booking requests and inquiries through CF7 forms - **Dashboard**: Comprehensive admin dashboard with statistics and charts - **Reports**: Detailed reports with CSV and PDF export - **Prometheus Metrics**: Expose operational metrics for monitoring with Grafana ### Requirements - WordPress 6.0 or higher - PHP 8.3 or higher - Valid license key - Contact Form 7 (optional, for booking forms) ## Installation 1. Download the latest release from the [releases page](https://src.bundespruefstelle.ch/magdev/wp-bnb/releases) 2. Upload the plugin to your `/wp-content/plugins/` directory 3. Activate the plugin through the 'Plugins' menu in WordPress 4. Go to **WP BnB → Settings → License** to enter your license key 5. Configure your business settings under **WP BnB → Settings** ## Configuration ### License Activation 1. Navigate to **WP BnB → Settings → License** 2. Enter your License Server URL 3. Enter your License Key (from purchase confirmation) 4. Enter the Server Secret (from purchase confirmation) 5. Click **Activate License** ### General Settings - **Business Name**: Your B&B business name - **Currency**: Select your preferred currency (CHF, EUR, USD, GBP) - **Business Address**: Street, city, postal code, country - **Contact Information**: Email, phone, website - **Social Media**: Facebook, Instagram, X (Twitter), LinkedIn, TripAdvisor ### Update Settings - **Update Notifications**: Enable/disable update notifications in WordPress - **Automatic Updates**: Enable/disable automatic plugin updates - **Check Frequency**: How often to check for updates (1-168 hours) ### Development Mode The plugin automatically detects local development environments and bypasses license validation. Supported environments: - localhost, 127.0.0.1, ::1 - Domains ending in .local, .test, .localhost, .dev, .ddev.site - Private IP ranges (10.x.x.x, 172.16-31.x.x, 192.168.x.x) ## Usage ### Managing Buildings 1. Go to **WP BnB → Buildings** 2. Click **Add New** 3. Enter building details (name, address, description) 4. Add featured image 5. Publish ### Managing Rooms 1. Go to **WP BnB → Rooms** 2. Click **Add New** 3. Select the parent building 4. Configure room details and pricing 5. Add amenities and room type 6. Publish ### Managing Bookings 1. Go to **WP BnB → Bookings** 2. View and manage all reservations 3. Update booking status as guests progress ### Managing Guests 1. Go to **WP BnB → Guests** 2. View guest records and booking history 3. Manage guest information ### Dashboard The dashboard (**WP BnB → Dashboard**) provides an at-a-glance overview of your B&B operations: **Statistics Cards:** - **Occupancy Rate** - Current percentage of rooms occupied with trend indicator - **Monthly Revenue** - This month's revenue with comparison to previous month - **Total Bookings** - Active bookings count with status breakdown - **Total Guests** - Guest count with new guests this month **Today's Activity:** - Check-ins scheduled for today with guest names and room assignments - Check-outs scheduled for today - Quick links to manage each booking **Upcoming Bookings:** - Next 7 days of arrivals - Guest name, room, dates, and booking status - Direct links to booking details **Quick Actions:** - New Booking - Create a booking directly - New Guest - Add a guest record - View Calendar - Open the availability calendar - View Reports - Access detailed reports **Trend Charts:** - 30-day occupancy trend line chart - 6-month revenue bar chart ### Reports Access detailed reports at **WP BnB → Reports**. All reports support date range filtering and export. **Occupancy Report:** - Overall occupancy percentage for the selected period - Breakdown by room showing nights booked, available, and occupancy rate - Visual progress bars for easy comparison - Total nights booked vs. available across all rooms **Revenue Report:** - Total revenue for the selected period - Revenue breakdown by room - Revenue breakdown by pricing tier (short-term, mid-term, long-term) - Revenue from additional services - Average booking value **Guest Statistics:** - Total guests and new guests in period - Repeat guest rate (guests with 2+ bookings) - Top guests by total spending - Guest nationality distribution - Average spending per guest **Export Options:** - **CSV Export** - Download report data as spreadsheet-compatible CSV - **PDF Export** - Generate formatted PDF reports for printing or archiving **Date Filters:** - This Month (default) - Last Month - This Year - Custom date range ## Shortcodes Display buildings and rooms on your site using shortcodes: ```txt [bnb_buildings] - List all buildings (grid/list layout) [bnb_rooms building="123"] - List rooms, optionally filtered by building [bnb_room_search] - Interactive room search form [bnb_building id="123"] - Display a single building [bnb_room id="456"] - Display a single room with availability ``` ### Shortcode Attributes **`[bnb_buildings]`** and **`[bnb_rooms]`**: - `layout` - "grid" or "list" (default: grid) - `columns` - 1-4 columns (default: 3) - `limit` - Number of items (default: 12) - `orderby` - title, date, price, capacity (default: title) - `order` - ASC or DESC (default: ASC) **`[bnb_rooms]`** additional attributes: - `building` - Building ID to filter by - `room_type` - Room type slug to filter by - `amenities` - Comma-separated amenity slugs ## Gutenberg Blocks The following blocks are available in the block editor: - **Building** - Display a single building with details - **Room** - Display a single room with availability form - **Room Search** - Interactive search form with filters - **Buildings List** - Display buildings grid/list - **Rooms List** - Display rooms grid/list with filters ## Widgets Available sidebar widgets: - **Similar Rooms** - Show rooms from same building or room type - **Building Rooms** - List all rooms in a building - **Availability Calendar** - Mini calendar showing booking status ## Contact Form 7 Integration The plugin integrates with Contact Form 7 to accept booking requests and inquiries. Custom form tags are provided for room selection, date pickers, and guest counts. ### Custom Form Tags Use these tags in your CF7 forms: - `[bnb_building_select name]` - Building dropdown (optional filter for rooms) - `[bnb_room_select* name]` - Room dropdown with capacity data - `[bnb_date_checkin* name]` - Check-in date picker - `[bnb_date_checkout* name]` - Check-out date picker - `[bnb_guests* name]` - Guest count input ### Tag Options **`[bnb_building_select]`**: - `first_as_label:"text"` - Placeholder text (default: "All Locations") **`[bnb_room_select]`**: - `building_field:"name"` - Link to building field for filtering - `first_as_label:"text"` - Placeholder text (default: "Select Room") **`[bnb_guests]`**: - `min:N` - Minimum guests (default: 1) - `max:N` - Maximum guests (default: 10) - `default:N` - Default value (default: 1) ### Example Booking Form ```txt

Book Your Stay

[bnb_building_select building first_as_label:"All Locations"]
[bnb_room_select* room building_field:"building" first_as_label:"Select a Room"]
[bnb_date_checkin* check_in]
[bnb_date_checkout* check_out]
[bnb_guests* guests min:1 max:10 default:2]

Your Information

[text* first_name]
[text* last_name]
[email* your_email]
[tel your_phone]
[textarea your_message]
[submit "Request Booking"]
``` ### Example Inquiry Form For room-specific inquiries, add the `wp-bnb-inquiry-form` class: ```txt

Inquire About This Room

[hidden room default:123]
[text* your_name]
[email* your_email]
[textarea* your_message]
[submit "Send Inquiry"]
``` ### Form Features - **Availability Checking**: Real-time AJAX validation shows room availability - **Price Display**: Estimated total calculated and displayed automatically - **Room Filtering**: Rooms filter by building selection - **Date Validation**: Check-out must be after check-in, no past dates - **Capacity Validation**: Guest count validated against room capacity - **Automatic Booking**: Booking record created with "pending" status on submission - **Guest Linking**: Guest records created or linked by email address ### Custom Mail Tags Use these in your CF7 mail templates: - `[_bnb_room_name]` - Room title - `[_bnb_building_name]` - Building name - `[_bnb_calculated_price]` - Formatted price - `[_bnb_nights]` - Number of nights - `[_bnb_booking_reference]` - Booking reference (after creation) ## Hooks and Filters Developers can customize behavior using these hooks: ```php // Modify price calculation add_filter( 'wp_bnb_calculate_price', function( $price, $room_id, $dates ) { // Custom pricing logic return $price; }, 10, 3 ); // Before booking creation add_action( 'wp_bnb_before_booking_create', function( $booking_data ) { // Custom validation or logging } ); ``` ## Prometheus Metrics The plugin integrates with [WP Prometheus](https://src.bundespruefstelle.ch/magdev/wp-prometheus) to expose operational metrics for monitoring with Prometheus and Grafana. ### Enabling Metrics 1. Install and activate the WP Prometheus plugin 2. Navigate to **WP BnB → Settings → Metrics** 3. Enable "Expose BnB metrics via Prometheus" 4. Metrics will be available at your site's `/metrics/` endpoint ### Available Metrics **Inventory Metrics:** - `wp_bnb_buildings_total` - Total number of buildings - `wp_bnb_rooms_total{status}` - Rooms by status (available, occupied, maintenance, inactive) - `wp_bnb_services_total{status}` - Services by status (active, inactive) - `wp_bnb_total_capacity_beds` - Total bed capacity across all rooms **Booking Metrics:** - `wp_bnb_bookings_total{status}` - Bookings by status (pending, confirmed, checked_in, checked_out, cancelled) - `wp_bnb_checkins_today` - Check-ins scheduled for today - `wp_bnb_checkouts_today` - Check-outs scheduled for today - `wp_bnb_bookings_upcoming_7days` - Bookings starting in next 7 days - `wp_bnb_booking_avg_duration_nights` - Average booking duration **Occupancy Metrics:** - `wp_bnb_occupancy_rate_current` - Current room occupancy rate (percentage) - `wp_bnb_occupancy_rate_this_month` - Monthly occupancy rate (percentage) - `wp_bnb_rooms_currently_occupied` - Rooms currently occupied **Revenue Metrics:** - `wp_bnb_revenue_this_month{currency}` - Revenue for current month - `wp_bnb_revenue_ytd{currency}` - Revenue year to date - `wp_bnb_booking_avg_value{currency}` - Average booking value - `wp_bnb_services_revenue_this_month{currency}` - Services revenue this month **Guest Metrics:** - `wp_bnb_guests_total` - Total registered guests - `wp_bnb_guests_by_status{status}` - Guests by status (active, blocked, vip) - `wp_bnb_guests_repeat` - Guests with more than one booking - `wp_bnb_guests_new_this_month` - New guests this month ### Grafana Dashboard A pre-configured Grafana dashboard is included at `assets/grafana/wp-bnb-dashboard.json`. If WP Prometheus is installed, the dashboard is automatically registered and available for export. The dashboard includes: - Occupancy gauges with color-coded thresholds - Bookings, rooms, and guests pie charts by status - Revenue and guest statistics panels - Today's check-ins/check-outs - Trend indicators ## Frequently Asked Questions ### Do I need a license to use this plugin? Yes, a valid license is required to use the frontend features in production. The admin functionality works without a license for evaluation purposes. Local development environments (localhost, .local, .test, .dev domains) automatically bypass license validation. ### Can I manage multiple properties? Yes, you can create unlimited buildings and rooms. ### Is the plugin GDPR compliant? Yes, guest data can be exported and deleted on request, and consent is tracked appropriately. ### Does it integrate with WooCommerce? WooCommerce integration for payments is planned for a future release. ### How is guest data secured? Sensitive guest data like passport/ID numbers are encrypted using AES-256-CBC encryption before storage. The encryption key is derived from your WordPress AUTH_KEY, ensuring data is secure at rest. ## Changelog See [CHANGELOG.md](CHANGELOG.md) for a detailed list of changes. ## Support For support, please create an issue at: ## Author **Marco Graetsch** - Website: - Email: ## License GPL-2.0-or-later This plugin is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or any later version.