{"id":357936,"date":"2026-09-04T08:30:17","date_gmt":"2026-09-04T08:30:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/rbfa-wedstrijden\/"},"modified":"2026-09-04T08:38:23","modified_gmt":"2026-09-04T08:38:23","slug":"ploegkalender-belgie","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ploegkalender-belgie\/","author":6325477,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.14.2","stable_tag":"1.14.2","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Ploegkalender Belgi\u00eb","header_author":"Creativitijd","header_description":"Football fixtures for Belgian clubs. Unofficial match calendar from the Voetbal Vlaanderen match center. Not affiliated with RBFA.","assets_banners_color":"edf3ef","last_updated":"2026-09-04 08:38:23","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/creativitijd.be\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":54,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"maarten_g","date":"2026-09-04 08:29:52","revision":3680892},"1.14.2":{"tag":"1.14.2","author":"maarten_g","date":"2026-09-04 08:38:23","revision":3680908}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3680949,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3680949,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3680949,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3680949,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.14.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[9083,416,14241,20781,1238],"plugin_category":[37,40],"plugin_contributors":[279127],"plugin_business_model":[],"class_list":["post-357936","plugin","type-plugin","status-publish","hentry","plugin_tags-belgium","plugin_tags-calendar","plugin_tags-club","plugin_tags-fixtures","plugin_tags-football","plugin_category-arts-and-entertainment","plugin_category-calendar-and-events","plugin_contributors-maarten_g","plugin_committers-maarten_g"],"banners":{"banner":"https:\/\/ps.w.org\/ploegkalender-belgie\/assets\/banner-772x250.png?rev=3680949","banner_2x":"https:\/\/ps.w.org\/ploegkalender-belgie\/assets\/banner-1544x500.png?rev=3680949","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ploegkalender-belgie\/assets\/icon-128x128.png?rev=3680949","icon_2x":"https:\/\/ps.w.org\/ploegkalender-belgie\/assets\/icon-256x256.png?rev=3680949","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Ploegkalender Belgi\u00eb shows football fixtures for Belgian clubs. Pick your club, tick the teams you want to show, and the plugin does the rest. The full calendar is stored in its own table and updated with WP-Cron, so results can come in week after week.<\/p>\n\n<p>This plugin is not affiliated with, endorsed by, or connected to the Royal Belgian Football Association (RBFA \/ KBVB) or Voetbal Vlaanderen. It reads publicly available match-center data and is not an official product of those organisations.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Choose a club via its club page URL, then tick teams from one list<\/li>\n<li>Several teams side by side, each with its own label (for example \"U13\" or \"First team\")<\/li>\n<li>Automatic sync hourly, twice a day, daily, or weekly<\/li>\n<li>Manual sync in one click, with a report per team<\/li>\n<li>Display as a table, cards, month calendar, or a compact homepage block<\/li>\n<li>Detects your own side so wins, losses, and draws can be highlighted<\/li>\n<li>Front-end cache that is cleared after every sync<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<p>For a team page you only need one:<\/p>\n\n<ul>\n<li><code>[rbfa_ploeg team=\"U13\"]<\/code> \u2014 one card with the next match, last result, standings, and upcoming fixtures.<\/li>\n<\/ul>\n\n<p>To compose the page yourself:<\/p>\n\n<ul>\n<li><code>[rbfa_tabel team=\"U13\"]<\/code> \u2014 full calendar for one team as a table, with scores when they are known.<\/li>\n<li><code>[rbfa_programma aantal=\"5\"]<\/code> \u2014 the next five matches, compact view for the homepage.<\/li>\n<li><code>[rbfa_uitslagen aantal=\"5\"]<\/code> \u2014 the last five played matches.<\/li>\n<li><code>[rbfa_stand team=\"Eerste Elftal\"]<\/code> \u2014 league table with your own team highlighted.<\/li>\n<li><code>[rbfa_positie team=\"Eerste Elftal\"]<\/code> \u2014 one line of text, for example \"8th of 18 with 6 points\".<\/li>\n<li><code>[rbfa_kalender]<\/code> \u2014 all matches in a month calendar. Browse with Previous and Next. Optional: <code>team=\"U13\"<\/code> and <code>uitslag=\"nee\"<\/code>.<\/li>\n<li><p><code>[rbfa_homepage link=\"\/kalender\/\"]<\/code> \u2014 the next five matches of all teams, with the team label per match and a button to the club calendar. Set <code>link<\/code> to the path (or page ID) of the page that contains <code>[rbfa_kalender]<\/code>. Optional: <code>aantal<\/code>, <code>titel<\/code>, <code>knop<\/code>, and <code>ploeg=\"nee\"<\/code>.<\/p>\n\n<p>[rbfa_ploeg] has its own attributes: <code>stand<\/code> and <code>kalender<\/code> (<code>ja<\/code> or <code>nee<\/code>), <code>aantal<\/code> for the length of the upcoming list, plus <code>titel<\/code>. For <code>[rbfa_stand]<\/code> you can shorten the table to the top teams with <code>aantal<\/code>.<\/p>\n\n<p>[rbfa_wedstrijden] is the full form the others are based on. These attributes work on every shortcode:<\/p><\/li>\n<li><p><code>team<\/code> \u2014 team ID or team label. Several values, comma-separated. Empty = all teams.<\/p><\/li>\n<li><code>type<\/code> \u2014 <code>alles<\/code>, <code>programma<\/code>, or <code>uitslagen<\/code>.<\/li>\n<li><code>aantal<\/code> \u2014 maximum number of matches. <code>0<\/code> = all.<\/li>\n<li><code>reeks<\/code> \u2014 <code>ja<\/code> (default) or <code>nee<\/code>: show the series name.<\/li>\n<li><code>uitslag<\/code> \u2014 <code>ja<\/code> (default) or <code>nee<\/code>: show the score column.<\/li>\n<li><code>series<\/code> \u2014 filter by a series ID.<\/li>\n<li><code>layout<\/code> \u2014 <code>kaarten<\/code>, <code>tabel<\/code>, or <code>compact<\/code>.<\/li>\n<li><code>titel<\/code> \u2014 optional title above the list.<\/li>\n<\/ul>\n\n<p>Example: <code>[rbfa_programma team=\"U13\" aantal=\"3\"]<\/code><\/p>\n\n<p>The <code>[rbfa_*]<\/code> shortcode names are kept so existing sites keep working. They do not mean this is an official RBFA product.<\/p>\n\n<h3>Trademark<\/h3>\n\n<p>Ploegkalender Belgi\u00eb is an unofficial, independent plugin by Creativitijd. \"RBFA\", \"KBVB\", \"Royal Belgian Football Association\", and \"Voetbal Vlaanderen\" belong to their respective owners. Those names appear only to describe the public match-center data source and to state that there is no affiliation.<\/p>\n\n<h3>Where do I find the club ID?<\/h3>\n\n<p>Look up your club on voetbalvlaanderen.be and open its club page. The URL ends with <code>\/club\/<\/code> followed by a number, for example <code>https:\/\/www.voetbalvlaanderen.be\/club\/2264<\/code>. That number is the club ID; paste the full URL or the number in the Club field.<\/p>\n\n<p>You do not need to look up team IDs: after you pick your club, the plugin loads all teams with their IDs. To follow a team from another club, use the lookup tool under \"Look up a team ID\" on Club &amp; teams.<\/p>\n\n<h3>When does the sync run?<\/h3>\n\n<p>Under Ploegkalender &gt; Settings you choose the frequency and the exact time, for example every Monday at 06:00. That hour uses the site timezone and stays the same after the switch to daylight saving time: after each run the plugin puts the schedule back on the chosen hour.<\/p>\n\n<p>By default WordPress uses WP-Cron. It has no real clock: it checks on a page view whether something is due. On a quiet club site the sync therefore starts at the first visit after the scheduled time.<\/p>\n\n<p>To run it on time, disable WP-Cron in <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>define( 'DISABLE_WP_CRON', true );\n<\/code><\/pre>\n\n<p>and let your server call <code>wp-cron.php<\/code> every five minutes:<\/p>\n\n<pre><code>*\/5 * * * * curl -fsS -m 60 \"https:\/\/yoursite.example\/wp-cron.php?doing_wp_cron\" &gt; \/dev\/null 2&gt;&amp;1\n<\/code><\/pre>\n\n<p>The Schedule block on Settings shows the next sync, whether WP-Cron is on or off, and the exact crontab lines with a copy button. Note: after this change every scheduled WordPress task uses that server cron, including scheduled posts and tasks from other plugins.<\/p>\n\n<h3>Standings<\/h3>\n\n<p>Each sync also loads the league table. The Standings column on Club &amp; teams shows the current position per team, or \"none\".<\/p>\n\n<p>The match center does not publish standings for youth series. For those teams there is nothing to fetch: <code>[rbfa_stand]<\/code> reports that no table is available and the standings block in <code>[rbfa_ploeg]<\/code> hides itself. Early in the season a table may also be missing until matches have been played.<\/p>\n\n<h3>Data source<\/h3>\n\n<p>The data comes from the unofficial GraphQL backend behind the public Voetbal Vlaanderen match center. That is not an official documented API and can change without notice. If the sync suddenly stops working, their query has likely changed. Club logos are not fetched or shown: those are third-party works.<\/p>\n\n<p>This plugin does not use an official RBFA or Voetbal Vlaanderen API and is not an official product of those organisations.<\/p>\n\n<h3>Scores<\/h3>\n\n<p>Each sync loads the calendar, opponents, series, and scores when the match center has published them. Scores you entered by hand are kept; an official score takes precedence in the display. Missing scores can still be entered under Ploegkalender &gt; Loaded matches.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the public GraphQL backend behind the Voetbal Vlaanderen \/ RBFA match center (<code>https:\/\/datalake-prod2018.rbfa.be\/graphql<\/code>) to load club teams, fixtures, scores, and league tables. That is not an official documented API.<\/p>\n\n<p>When an administrator looks up a club or team, and on each scheduled or manual sync, the plugin sends a GraphQL query with a club ID or team ID and a language code. It does not send WordPress user accounts, e-mail addresses, or visitor data.<\/p>\n\n<p>This plugin is not affiliated with RBFA or Voetbal Vlaanderen. Those organisations provide the public match-center data. Their terms and privacy policy:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/www.rbfa.be\/en\/terms-and-conditions\">RBFA terms and conditions<\/a><\/li>\n<li><a href=\"https:\/\/www.rbfa.be\/en\/privacy\">RBFA privacy policy<\/a><\/li>\n<li><a href=\"https:\/\/www.voetbalvlaanderen.be\/algemene-gebruiksvoorwaarden\">Voetbal Vlaanderen terms of use<\/a><\/li>\n<li><a href=\"https:\/\/www.voetbalvlaanderen.be\/nl\/privacyverklaring\">Voetbal Vlaanderen privacy statement<\/a><\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the zip via Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to Ploegkalender &gt; Club &amp; teams, paste your club page URL, and click Fetch teams.<\/li>\n<li>Tick the teams you want to show and click Save selection and load.<\/li>\n<li>Choose the sync frequency under Ploegkalender &gt; Settings.<\/li>\n<li>Place the shortcodes on your pages.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.14.2<\/h4>\n\n<ul>\n<li>Removed load_plugin_textdomain(); WordPress.org loads translations automatically.<\/li>\n<\/ul>\n\n<h4>1.14.1<\/h4>\n\n<ul>\n<li>Plugin header: Author URI only. Plugin URI removed so it is no longer the same as the author URL.<\/li>\n<\/ul>\n\n<h4>1.14.0<\/h4>\n\n<ul>\n<li>Scores load automatically on every sync. The WordPress.org plugin no longer uses a license key or an external license server.<\/li>\n<li>Readme documents the match-center GraphQL service, including terms and privacy links.<\/li>\n<\/ul>\n\n<h4>1.13.1<\/h4>\n\n<ul>\n<li>Renamed to Ploegkalender Belgi\u00eb (slug ploegkalender-belgie). Display name describes football fixtures for Belgian clubs without implying an official RBFA product.<\/li>\n<\/ul>\n\n<h4>1.13.0<\/h4>\n\n<ul>\n<li>Renamed away from RBFA Wedstrijden and added an explicit trademark disclaimer. Existing shortcodes, settings, and database tables are unchanged.<\/li>\n<\/ul>\n\n<h4>1.12.6<\/h4>\n\n<ul>\n<li>Plugin Check: match queries use a fixed prepared statement; filters run in PHP.<\/li>\n<\/ul>\n\n<h4>1.12.5<\/h4>\n\n<ul>\n<li>Plugin Check: $wpdb-&gt;prepare() uses inlined SQL instead of query variables.<\/li>\n<\/ul>\n\n<h4>1.12.4<\/h4>\n\n<ul>\n<li>Plugin Check: correct $wpdb-&gt;prepare() placeholders for IN-queries and escaped match queries.<\/li>\n<\/ul>\n\n<h4>1.12.3<\/h4>\n\n<ul>\n<li>Plugin Check: prefixed uninstall variables and escaped custom table names in SQL.<\/li>\n<\/ul>\n\n<h4>1.12.2<\/h4>\n\n<ul>\n<li>Plugin Check: English readme, Tested up to 7.1, languages folder, nonce checks, and SQL table names without interpolation.<\/li>\n<\/ul>\n\n<h4>1.12.1<\/h4>\n\n<ul>\n<li><code>[rbfa_homepage]<\/code> no longer shows a title or a border. A title is still possible with <code>titel=\"\"<\/code>.<\/li>\n<\/ul>\n\n<h4>1.12.0<\/h4>\n\n<ul>\n<li><code>[rbfa_homepage]<\/code> shows the team label per match (U13, First team, and so on). Hide it with <code>ploeg=\"nee\"<\/code>.<\/li>\n<\/ul>\n\n<h4>1.11.0<\/h4>\n\n<ul>\n<li>New shortcode <code>[rbfa_homepage]<\/code>: compact list of the next matches for the homepage, with a button to the club calendar.<\/li>\n<li>In <code>[rbfa_tabel]<\/code> the next match gets a grey background.<\/li>\n<\/ul>\n\n<h4>1.10.0<\/h4>\n\n<ul>\n<li>New shortcode <code>[rbfa_kalender]<\/code>: matches in a month view, with previous and next month.<\/li>\n<\/ul>\n\n<h4>1.9.0<\/h4>\n\n<ul>\n<li>Setting \"Display name of your club\": your own team is shown the same everywhere, even when RBFA changes capitalisation. Suffixes such as U13 stay.<\/li>\n<\/ul>\n\n<h4>1.8.1<\/h4>\n\n<ul>\n<li>Times in the table are shown as \"18.30 uur\" instead of \"18u30\".<\/li>\n<\/ul>\n\n<h4>1.8.0<\/h4>\n\n<ul>\n<li>Shortcode attribute <code>uitslag=\"nee\"<\/code> hides the Score column, for example <code>[rbfa_tabel team=\"U13\" uitslag=\"nee\"]<\/code>.<\/li>\n<\/ul>\n\n<h4>1.7.4<\/h4>\n\n<ul>\n<li>Kick-off times in tables no longer use mysql2date for the hour, so a timestamp no longer appears.<\/li>\n<li>A plugin update clears the front-end cache, so an old table does not stick.<\/li>\n<\/ul>\n\n<h4>1.7.3<\/h4>\n\n<ul>\n<li>Kick-off times in tables show the hour again, not a timestamp.<\/li>\n<\/ul>\n\n<h4>1.7.2<\/h4>\n\n<ul>\n<li>Club logos are no longer fetched, stored, or shown.<\/li>\n<\/ul>\n\n<h4>1.7.1<\/h4>\n\n<ul>\n<li>Remove license button next to the license key; the site is then also disconnected on the license server.<\/li>\n<\/ul>\n\n<h4>1.7.0<\/h4>\n\n<ul>\n<li>The license key is checked with the license server on creativitijd.be.<\/li>\n<li>Expiry date and number of used sites come back from the server.<\/li>\n<li>If the server is down, the last known status stays valid for 30 days.<\/li>\n<li>Dates in the table are written in full, for example \"Sunday 6 September - 10.00 uur\".<\/li>\n<\/ul>\n\n<h4>1.6.0<\/h4>\n\n<ul>\n<li>License key for paid features, bound to one domain, with an expiry date.<\/li>\n<li>The settings screen shows whether the key is valid, until when, and which domain it must be issued for.<\/li>\n<li>Paid features can also be enabled on your own installs with the constant RBFA_WEDSTRIJDEN_PRO in wp-config.php.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Fixed sync time: choose day and hour instead of \"an hour after activation\".<\/li>\n<li>The schedule stays on the chosen hour after the switch to summer or winter time.<\/li>\n<li>Schedule block on Settings: next sync, WP-Cron status, and the exact cron lines to copy.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>League table is synced as well, free in every version.<\/li>\n<li>New shortcodes <code>[rbfa_stand]<\/code> and <code>[rbfa_positie]<\/code>.<\/li>\n<li>New shortcode <code>[rbfa_ploeg]<\/code>: one card per team with next match, last result, standings, and fixtures.<\/li>\n<li>Standings column for configured teams and standings status in the sync report.<\/li>\n<li>Home or away is now determined via the RBFA team ID instead of name matching.<\/li>\n<li>Official team and club names are fetched from the club instead of inferred from the calendar.<\/li>\n<li>A typo in <code>team=<\/code> now shows a clear message instead of an empty card.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Manual scores, stored separately so a sync never overwrites them.<\/li>\n<li>Automatic score import is now a paid feature.<\/li>\n<li>Source column shows per match whether the score came from RBFA or was entered by hand.<\/li>\n<li>Overview of your version and available features on Settings.<\/li>\n<\/ul>\n\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>Help in the admin screen on where to find the club ID.<\/li>\n<li>Lookup that shows teams and team IDs of any club, with a button to add one straight away.<\/li>\n<li>Copy buttons next to each team ID and each shortcode.<\/li>\n<li>Link to your club page and a pointer from Settings to Club &amp; teams.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Choose a club via the club page URL, with a tick list of all teams of that club.<\/li>\n<li>New shortcodes <code>[rbfa_tabel]<\/code>, <code>[rbfa_programma]<\/code>, and <code>[rbfa_uitslagen]<\/code>.<\/li>\n<li>Compact view for the homepage.<\/li>\n<li>Club keyword is now derived automatically on the first sync.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First version: manage teams, load the calendar, automatic sync, and a shortcode for fixtures and results.<\/li>\n<\/ul>","raw_excerpt":"Football fixtures for Belgian clubs. Unofficial match calendar. Not affiliated with RBFA or Voetbal Vlaanderen.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/357936","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=357936"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/maarten_g"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=357936"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=357936"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=357936"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=357936"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=357936"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=357936"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}