A WordPress plugin for integrating Tebuto appointment booking into your website.
- Features
- Requirements
- Installation
- Quick Start
- Shortcode
- Gutenberg Block
- Admin Features
- Local Development
- Building from Source
- Related Projects
- Contributing
- License
- OAuth Integration — Connect your Tebuto account with one click
- Drop-in Widget — Embed the Tebuto booking widget via shortcode or Gutenberg block
- Multiple Widgets — Use several booking widgets with different settings on the same page
- Theming — Customize colors, fonts, borders, and CSS to match your brand
- Admin Dashboard — View upcoming appointments, manage bookings, and edit categories from WordPress
- Category Filters — Restrict widgets to specific appointment categories
- Multi-User Support — Provider filter and quick filters for team accounts
- Page Builder Compatible — Works with Elementor, Divi, WPBakery, and other builders via shortcode
- WordPress 5.0 or higher
- PHP 7.4 or higher
- A Tebuto account
- Go to Plugins → Add New in your WordPress admin
- Search for "Tebuto"
- Click Install Now, then Activate
git clone https://github.com/tebuto/wordpress-plugin.git
cd wordpress-plugin
npm install
npm run buildUpload the tebuto-online-terminbuchung/ directory (or the generated tebuto-online-terminbuchung.zip) to /wp-content/plugins/ and activate the plugin.
- Activate the plugin
- Go to Tebuto → Settings in the WordPress admin
- Click Connect with Tebuto and sign in
- Add the shortcode or Gutenberg block to any page:
[tebuto_online_terminbuchung_widget]
Your public appointments will appear automatically on the page.
The primary way to embed the booking widget:
[tebuto_online_terminbuchung_widget]
Override default settings per instance:
[tebuto_online_terminbuchung_widget primary_color="#3b82f6" categories="1,2,3" border="true"]
| Attribute | Type | Default | Description |
|---|---|---|---|
primary_color |
hex color | #00B4A9 |
Primary brand color for buttons and highlights |
background_color |
hex color | #ffffff |
Widget background color |
text_primary |
hex color | #374151 |
Primary text color |
text_secondary |
hex color | #6b7280 |
Secondary/muted text color |
border_color |
hex color | #E9E9E9 |
Border color |
border |
true / false |
false |
Show border around the widget |
inherit_font |
true / false |
false |
Use the parent page font |
categories |
comma-separated IDs | all | Filter to specific category IDs |
show_quick_filters |
true / false |
false |
Show quick filter buttons for time slots |
show_provider_filter |
true / false |
false |
Show provider selector (multi-user accounts) |
custom_css |
CSS string | — | Custom CSS scoped to this widget instance |
Defaults can be configured globally under Tebuto → Shortcode. The live shortcode generator on that page updates automatically as you change settings.
Search for Tebuto in the block inserter to add the booking widget. All shortcode settings are available in the block sidebar, including theme presets, category filters, and live preview.
The block uses the same underlying Tebuto booking widget as the shortcode.
Once connected, the Tebuto menu provides:
| Page | Description |
|---|---|
| Dashboard | Overview of upcoming appointments |
| Bookings | View, confirm, and cancel appointments |
| Categories | Manage appointment categories |
| Shortcode | Configure widget appearance with live preview |
| Settings | Connect or disconnect your Tebuto account |
The repository includes a Docker Compose setup that runs WordPress and MariaDB locally. Plugin changes are synced into wordpress/wp-content/plugins/ automatically via npm scripts.
Requirements: Docker, Node.js 20+
npm install
npm run dev:setupThis will:
- Install block dependencies
- Start WordPress (
http://localhost:8000) and MariaDB via Docker - Build the Gutenberg block and copy the plugin into the local WordPress instance
- Create
wordpress/wp-config.local.phpwith Tebuto API URL overrides for local development
Complete the WordPress installation in your browser, then activate Tebuto - Online-Terminbuchung under Plugins.
| Command | Description |
|---|---|
npm run dev:setup |
First-time setup: Docker + build + sync plugin |
npm run dev:build |
Build block and sync plugin to local WordPress |
npm run dev:sync |
Sync plugin files without rebuilding the block |
npm run dev |
Watch block source and auto-sync on file changes |
npm run dev:up |
Start Docker containers |
npm run dev:down |
Stop Docker containers |
npm run dev:logs |
Tail WordPress container logs |
Typical workflow after setup:
# PHP or block changes — build and push to WordPress
npm run dev:build
# Active block development — watch + auto-sync
npm run dev
# PHP-only changes — sync without rebuilding
npm run dev:syncThe plugin is installed at wordpress/wp-content/plugins/tebuto-online-terminbuchung/. The wordpress/ directory is gitignored and persists between container restarts.
When developing against a self-hosted Tebuto instance, edit wordpress/wp-config.local.php:
define('TEBUTO_API_URL', 'https://therapists.api.tebuto.local');
define('TEBUTO_AUTH_URL', 'https://auth.tebuto.local');
define('TEBUTO_WIDGET_URL', 'https://tebuto.local/widget/booking.js');
define('TEBUTO_SSL_VERIFY', false);Docker maps the required hostnames to your machine via host-gateway (see docker-compose.yaml).
For Keycloak OAuth client setup when using a self-hosted Tebuto instance, see CONTRIBUTING.md.
See CONTRIBUTING.md for the full development guide.
npm install # Install block dependencies
npm run build:block # Compile the Gutenberg block
npm run build # Create tebuto-online-terminbuchung.zip| Project | Description |
|---|---|
| @tebuto/react-booking-widget | React component for embedding Tebuto booking outside WordPress |
| Tebuto | Online appointment booking platform for therapists and coaches |
Contributions are welcome! Please read CONTRIBUTING.md for development setup, coding standards, and the manual WordPress.org release process.
This repository is licensed under GPLv2 or later.