{"id":301339,"date":"2026-05-05T12:04:08","date_gmt":"2026-05-05T12:04:08","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/badhub-widget\/"},"modified":"2026-05-06T15:52:17","modified_gmt":"2026-05-06T15:52:17","slug":"badhub-widget","status":"publish","type":"plugin","link":"https:\/\/cs.wordpress.org\/plugins\/badhub-widget\/","author":23482227,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"0.2.0","stable_tag":"0.2.0","tested":"6.9.4","requires":"5.8","requires_php":"8.1","requires_plugins":null,"header_name":"Badhub Widget","header_author":"Christian Plunze","header_description":"Ligatabellen und Spielpl\u00e4ne f\u00fcr Badmintonvereine \u2013 direkt auf der eigenen Website einbetten.","assets_banners_color":"fafbfc","last_updated":"2026-05-06 15:52:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/plugin.badhub.de","header_author_uri":"https:\/\/badhub.de","rating":0,"author_block_rating":0,"active_installs":0,"downloads":62,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"badhub","date":"2026-05-05 12:03:40"},"0.2.0":{"tag":"0.2.0","author":"badhub","date":"2026-05-06 15:52:17"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3523313,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3523313,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3524603,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3524603,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":{"badhub\/widget":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"badhub\/widget","title":"Badhub Widget","category":"embed","icon":"chart-bar","description":"Ligatabelle deines Vereins direkt auf deiner Website.","keywords":["badminton","ligatabelle","sport","verein"],"supports":{"html":false},"attributes":{"pool_id":{"type":"string","default":""},"theme":{"type":"string","default":"light"},"highlight":{"type":"boolean","default":true},"promotion":{"type":"boolean","default":true},"logos":{"type":"boolean","default":true}},"editorScript":"file:.\/block.js","style":"file:.\/block-style.css"}},"tagged_versions":["0.1.0","0.2.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3523313,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3523313,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3523313,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3523313,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"League table widget on a club website","2":"Match schedule with clickable match reports","3":"Plugin settings page","4":"Widget Generator on plugin.badhub.de"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[151655,14241,4062,6167,2289],"plugin_category":[37,40],"plugin_contributors":[261925],"plugin_business_model":[],"class_list":["post-301339","plugin","type-plugin","status-publish","hentry","plugin_tags-badminton","plugin_tags-club","plugin_tags-schedule","plugin_tags-sport","plugin_tags-table","plugin_category-arts-and-entertainment","plugin_category-calendar-and-events","plugin_contributors-badhub","plugin_committers-badhub"],"banners":{"banner":"https:\/\/ps.w.org\/badhub-widget\/assets\/banner-772x250.png?rev=3524603","banner_2x":"https:\/\/ps.w.org\/badhub-widget\/assets\/banner-1544x500.png?rev=3524603","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/badhub-widget\/assets\/icon-128x128.png?rev=3523313","icon_2x":"https:\/\/ps.w.org\/badhub-widget\/assets\/icon-256x256.png?rev=3523313","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/badhub-widget\/assets\/screenshot-1.png?rev=3523313","caption":"League table widget on a club website"},{"src":"https:\/\/ps.w.org\/badhub-widget\/assets\/screenshot-2.png?rev=3523313","caption":"Match schedule with clickable match reports"},{"src":"https:\/\/ps.w.org\/badhub-widget\/assets\/screenshot-3.png?rev=3523313","caption":"Plugin settings page"},{"src":"https:\/\/ps.w.org\/badhub-widget\/assets\/screenshot-4.png?rev=3523313","caption":"Widget Generator on plugin.badhub.de"}],"raw_content":"<!--section=description-->\n<p><strong>Badhub Widget<\/strong> lets badminton clubs embed their current league table and match schedule on their own website. No technical knowledge required.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Live league table<\/strong> \u2014 always up to date, directly from badhub.de<\/li>\n<li><strong>Match schedule<\/strong> \u2014 upcoming fixtures and past results with match reports<\/li>\n<li><strong>Table + Schedule combined<\/strong> \u2014 both widgets in one<\/li>\n<li><strong>Automatic height adjustment<\/strong> \u2014 the iframe resizes to fit its content<\/li>\n<li><strong>Theme support<\/strong> \u2014 light mode, dark mode, or auto (follows the visitor's system preference)<\/li>\n<li><strong>Highlight your own club<\/strong> \u2014 your club's row is visually emphasised<\/li>\n<li><strong>Promotion\/relegation markers<\/strong> \u2014 coloured indicators for promotion and relegation zones<\/li>\n<li><strong>Club logos<\/strong> \u2014 optional logo display next to each team name<\/li>\n<li><strong>Federation mode<\/strong> \u2014 display a full federation table (for federation websites)<\/li>\n<li>Works with any WordPress theme via shortcode or Gutenberg block<\/li>\n<\/ul>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Install and activate the plugin<\/li>\n<li>Go to <strong>Settings \u2192 Badhub Widget<\/strong><\/li>\n<li>Enter your free API key (get one at <a href=\"https:\/\/plugin.badhub.de\">plugin.badhub.de<\/a>)<\/li>\n<li>Select your federation and club<\/li>\n<li>Insert <code>[badhub_widget]<\/code> into any page or post<\/li>\n<\/ol>\n\n<h4>Shortcode options<\/h4>\n\n<pre><code>[badhub_widget] \u2014 league table (default)\n[badhub_widget type=\"matches\"] \u2014 match schedule\n[badhub_widget type=\"combined\"] \u2014 table + schedule combined\n[badhub_widget type=\"table\" pool_id=\"12345\"] \u2014 specific league pool\n[badhub_widget theme=\"dark\"] \u2014 dark mode\n[badhub_widget highlight=\"0\"] \u2014 disable own-club highlight\n[badhub_widget promotion=\"0\"] \u2014 hide promotion\/relegation markers\n[badhub_widget logos=\"0\"] \u2014 hide club logos\n<\/code><\/pre>\n\n<h4>Federation league system shortcode (`[badhub_liga]`)<\/h4>\n\n<p>Federations with an active Federation-tier license can embed the <strong>complete league system<\/strong> \u2014 all divisions, all tables, full match schedule with built-in 3-level navigation \u2014 using a single shortcode:<\/p>\n\n<pre><code>[badhub_liga federation=\"bvbb\"] \u2014 full league widget for the BVBB federation\n[badhub_liga federation=\"bvbb\" ga=\"G-XXXXXXXX\"] \u2014 with Google Analytics 4 tracking\n[badhub_liga min_height=\"700\"] \u2014 set initial iframe height (default 500)\n<\/code><\/pre>\n\n<p>The federation slug is required. If your Plugin Settings already specify a federation, the attribute can be omitted. Only federations with a valid Federation-tier license on badhub.de are served \u2014 other slugs return 403.<\/p>\n\n<h4>External service<\/h4>\n\n<p>This plugin connects to <strong>badhub.de<\/strong> to retrieve league tables and match data, and to <strong>plugin.badhub.de<\/strong> to render the widget iframe.<\/p>\n\n<ul>\n<li>Service website: <a href=\"https:\/\/badhub.de\">https:\/\/badhub.de<\/a><\/li>\n<li>Privacy policy: <a href=\"https:\/\/badhub.de\/datenschutz\">https:\/\/badhub.de\/datenschutz<\/a><\/li>\n<li>Terms of use: <a href=\"https:\/\/badhub.de\/nutzungsbedingungen\">https:\/\/badhub.de\/nutzungsbedingungen<\/a><\/li>\n<\/ul>\n\n<p>Data is fetched when a page containing the widget shortcode is loaded by a visitor. No personal visitor data is transmitted to badhub.de.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to <code>\/wp-content\/plugins\/badhub-widget\/<\/code>, or install via <strong>Plugins \u2192 Add New<\/strong> and search for \"Badhub Widget\"<\/li>\n<li>Activate the plugin<\/li>\n<li>Go to <strong>Settings \u2192 Badhub Widget<\/strong><\/li>\n<li>Enter your API key (free at <a href=\"https:\/\/plugin.badhub.de\">plugin.badhub.de<\/a>)<\/li>\n<li>Select your federation and club<\/li>\n<li>Add <code>[badhub_widget]<\/code> to any page or post<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20get%20an%20api%20key%3F\"><h3>Where do I get an API key?<\/h3><\/dt>\n<dd><p>Visit <a href=\"https:\/\/plugin.badhub.de\">plugin.badhub.de<\/a> and register for free. You will receive your API key by email immediately.<\/p><\/dd>\n<dt id=\"is%20the%20plugin%20free%3F\"><h3>Is the plugin free?<\/h3><\/dt>\n<dd><p>Yes. The free tier includes the full league table with the \"Powered by badhub.de\" badge. A Pro upgrade (no badge, priority support) is available for a small annual fee.<\/p><\/dd>\n<dt id=\"which%20federations%20are%20supported%3F\"><h3>Which federations are supported?<\/h3><\/dt>\n<dd><p>Currently supported: BVBB, BVRP, HBV, BWBV, BBV, NBV. More federations are being added.<\/p><\/dd>\n<dt id=\"the%20widget%20shows%20nothing%20%2F%20an%20error%20%E2%80%94%20what%20do%20i%20do%3F\"><h3>The widget shows nothing \/ an error \u2014 what do I do?<\/h3><\/dt>\n<dd><ul>\n<li>Make sure your API key is entered correctly under <strong>Settings \u2192 Badhub Widget<\/strong><\/li>\n<li>Check that the API key is registered for your website's domain<\/li>\n<li>Make sure you have selected your federation and club<\/li>\n<\/ul><\/dd>\n<dt id=\"can%20i%20use%20the%20widget%20without%20wordpress%3F\"><h3>Can I use the widget without WordPress?<\/h3><\/dt>\n<dd><p>Yes. Visit <a href=\"https:\/\/plugin.badhub.de\">plugin.badhub.de<\/a> to generate a script tag embed code that works on any website.<\/p><\/dd>\n<dt id=\"can%20i%20display%20multiple%20widgets%20on%20one%20page%3F\"><h3>Can I display multiple widgets on one page?<\/h3><\/dt>\n<dd><p>Yes. Each <code>[badhub_widget]<\/code> shortcode generates an independent iframe. You can use different <code>pool_id<\/code> or <code>type<\/code> attributes for each.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.2.0<\/h4>\n\n<ul>\n<li>\"Pr\u00fcfen\" button next to API key field \u2014 auto-fills the registered federation and club, locks them for free\/pro keys (federation tier still has full freedom). Lock now persists across saves (15-min transient cache, server-side rendered)<\/li>\n<li>Fixed critical PHP TypeError when saving settings without selecting all fields (sanitize callbacks now accept null\/empty values)<\/li>\n<li>New \"Transparent background\" option (<code>transparent=\"1\"<\/code> shortcode attribute) \u2014 widget background becomes transparent so the host page background shows through; theme (light\/dark\/auto) still drives text and border colours<\/li>\n<li>New API endpoint <code>\/api\/v1\/key-info<\/code> returns tier, federation and registered club for the calling key<\/li>\n<\/ul>\n\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>League table widget (shortcode + Gutenberg block)<\/li>\n<li>Match schedule widget (<code>type=\"matches\"<\/code>)<\/li>\n<li>Combined table + schedule widget (<code>type=\"combined\"<\/code>)<\/li>\n<li>Dark mode and auto theme support<\/li>\n<li>Promotion\/relegation markers and club logo display<\/li>\n<li>Federation mode for federation websites<\/li>\n<li>Live preview in plugin settings<\/li>\n<\/ul>","raw_excerpt":"Show live league tables and match schedules for badminton clubs \u2014 directly on your website.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/301339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=301339"}],"author":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/badhub"}],"wp:attachment":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=301339"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=301339"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=301339"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=301339"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=301339"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=301339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}