Sportlink KNVB Club.Dataservices
Wordpress plugin voor Sportlink Club.dataservices
by Richard van der Meer · github.com/richardvandermeer/wordpress-sportlink.club.dataservices
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/richardvandermeer/wordpress-sportlink.club.dataservices/archive/refs/heads/master.zipSportlink KNVB Club.Dataservices Plugin
WordPress plugin voor het tonen van wedstrijdprogramma's, uitslagen, standen en meer vanuit de Sportlink Club.Dataservices API.
Versie: 1.2.0 Auteur: Richard van der Meer Licentie: GPL v2 or later
✨ Nieuwe Features (v1.2.0)
🎯 API Interface Klasse
Een volledig nieuwe, gestructureerde PHP interface voor de Sportlink API:
- Type-safe methoden voor alle API endpoints
- Autocomplete in je IDE voor alle beschikbare functies
- Duidelijke documentatie met parameter uitleg
- Error handling ingebouwd
- Kant-en-klare voorbeelden die je direct kunt gebruiken
🛡️ Verbeterde Beveiliging
- Input sanitization op alle user input
- Output escaping in templates
- Nonce verificatie voor admin acties
- API parameter validatie met whitelisting
⚡ Prestatie Optimalisaties
- WordPress Transients API voor efficiënte caching
- Request-level caching voorkomt dubbele API calls
- Lazy loading van team data
- Geoptimaliseerde HTTP requests
🔒 Resilience Features
- Circuit breaker pattern (3-failure threshold)
- Stale cache fallback (tot 7 dagen)
- Timeout optimization (8 seconden)
- Dashboard widget voor API status monitoring
📦 Installatie
- Upload de plugin map naar
/wp-content/plugins/ - Activeer de plugin via WordPress Admin
- Ga naar Instellingen → Sportlink
- Vul je Sportlink Client ID in
- Stel cache tijd in (standaard: 30 minuten)
- Sla de instellingen op
🚀 Snel Starten
Methode 1: Bestaande Shortcodes (Backwards Compatible)
De oude shortcodes werken nog steeds:
[sportlink type="programma"]
[sportlink type="uitslagen"]
[sportlink type="stand" wedstrijd="123"]
Methode 2: Nieuwe API Interface (Aanbevolen)
Gebruik de nieuwe API klasse voor meer flexibiliteit:
// Maak API instance
$api = Sportlink_API::create_from_settings();
// Haal teams op
$teams = $api->get_teams([
'geslacht' => 'MAN',
'leeftijdscategorie' => 'SENIOREN'
]);
if (!is_wp_error($teams)) {
foreach ($teams as $team) {
echo $team['teamnaam'] . '<br>';
}
}
Methode 3: Quick Start Shortcodes
Kopieer kant-en-klare shortcodes uit examples/quick-start-shortcodes.php:
[sportlink_teams geslacht="MAN"]
[sportlink_programma teamcode="123" aantal="5"]
[sportlink_uitslagen teamcode="123"]
[sportlink_stand poulecode="456"]
[sportlink_clubinfo]
📚 Documentatie
Voor Ontwikkelaars
- API Interface Documentatie - Volledige API referentie
- Cheat Sheet - Snelle referentie voor veelgebruikte calls
- Voorbeelden - Praktische code voorbeelden
API Methoden (Hoogtepunten)
// Teams & Competitie
$api->get_teams($args)
$api->get_team_indeling($teamcode, $lokaleteamcode)
$api->get_team_gegevens($teamcode, $lokaleteamcode)
// Programma & Uitslagen
$api->get_programma($args)
$api->get_uitslagen($args)
$api->get_afgelastingen($args)
// Wedstrijd Details
$api->get_wedstrijd_informatie($wedstrijdcode)
$api->get_wedstrijd_thuisteam($wedstrijdcode)
$api->get_wedstrijd_uitteam($wedstrijdcode)
// Standen
$api->get_poulestand($poulecode)
$api->get_poulelijst()
// Club Gegevens
$api->get_clubgegevens()
$api->get_bestuur()
$api->get_commissies()
// En 50+ andere methoden...
Zie API-INTERFACE.md voor alle beschikbare methoden.
🎯 Voorbeelden
Team Lijst met Filter
$api = Sportlink_API::create_from_settings();
$teams = $api->get_teams([
'geslacht' => 'VROUW',
'leeftijdscategorie' => 'SENIOREN',
'spelsoort' => 'VELD'
]);
if (!is_wp_error($teams)) {
echo '<ul>';
foreach ($teams as $team) {
echo '<li>' . esc_html($team['teamnaam']) . '</li>';
}
echo '</ul>';
}
Komende 5 Wedstrijden
$api = Sportlink_API::create_from_settings();
$programma = $api->get_programma([
'aantalregels' => 5,
'aantaldagen' => 30,
'teamcode' => 12345
]);
if (!is_wp_error($programma)) {
foreach ($programma as $wedstrijd) {
echo $wedstrijd['datum'] . ' - ' . $wedstrijd['wedstrijd'] . '<br>';
}
}
Poule Stand
$api = Sportlink_API::create_from_settings();
$stand = $api->get_poulestand(67890);
if (!is_wp_error($stand)) {
echo '<table>';
foreach ($stand as $team) {
$class = ($team['eigenteam'] ?? false) ? ' class="eigenteam"' : '';
echo '<tr' . $class . '>';
echo '<td>' . esc_html($team['positie']) . '</td>';
echo '<td>' . esc_html($team['teamnaam']) . '</td>';
echo '<td>' . esc_html($team['punten']) . '</td>';
echo '</tr>';
}
echo '</table>';
}
Meer voorbeelden in de examples/ map.
⚠️ Error Handling
Belangrijk: Check altijd op fouten!
$data = $api->get_teams();
if (is_wp_error($data)) {
// Log fout
error_log('Sportlink Error: ' . $data->get_error_message());
// Toon gebruiksvriendelijke melding
echo '<p>Kon teams niet ophalen. Probeer het later opnieuw.</p>';
return;
}
// Gebruik data
foreach ($data as $item) {
// ...
}
🔧 Configuratie
WordPress Admin
Ga naar Instellingen → Sportlink:
- Client ID: Je Sportlink API client ID (verplicht)
- Cache Tijd: Hoe lang data gecached wordt (standaard: 30 minuten)
- Cache Leegmaken: Knop om handmatig cache te legen
Dashboard Widget
Bekijk de API status in je WordPress dashboard:
- ✓ Operationeel (groen)
- ⚡ Instabiel (geel)
- ⚠️ Niet beschikbaar (rood)
🎨 Templates
De plugin gebruikt Gamajo Template Loader voor flexibele templates.
Template Bestanden
templates/fixtures.php- Wedstrijd programmatemplates/standings.php- Volledige standtemplates/standings-small.php- Compacte stand
Custom Templates
Kopieer een template naar je theme:
/wp-content/themes/jouw-theme/sportlink/standings.php
De plugin gebruikt automatisch je custom template.
🔒 Beveiliging
De plugin implementeert WordPress security best practices:
- ✅ Input sanitization (sanitize_key, sanitize_text_field)
- ✅ Output escaping (esc_html, esc_attr, esc_url)
- ✅ Nonce verificatie voor admin acties
- ✅ API parameter whitelisting
- ✅ Capability checks (manage_options)
⚡ Performance
Caching Strategie
- Transients Cache (30 min): Verse data voor normale situatie
- Stale Cache (7 dagen): Backup data bij API problemen
- Circuit Breaker: Automatische fallback bij 3+ fouten
- Request Cache: Voorkomt dubbele API calls binnen één pageview
Cache Beheer
- Automatisch: Expired transients worden verwijderd
- Handmatig: Admin knop "Cache leegmaken"
- Per API key: Cache wordt geleegd bij API key wijziging
📋 Requirements
- WordPress: 5.0 of hoger
- PHP: 7.4 of hoger
- Sportlink Account: Met geldige Client ID
🆘 Troubleshooting
"API niet geconfigureerd"
- Check of Client ID is ingevuld in Instellingen → Sportlink
- Controleer of de Client ID correct is
"Kon data niet ophalen"
- Check het dashboard widget voor API status
- Kijk in de WordPress debug log voor details
- Test de API handmatig:
https://data.sportlink.com/clubgegevens?client_id=JOUW_ID
Data wordt niet ververst
- Klik op "Cache leegmaken" in de plugin instellingen
- Check of de cache tijd niet te hoog is ingesteld
Circuit breaker actief
- De API is tijdelijk niet bereikbaar
- Er wordt automatisch oude cache gebruikt
- De circuit breaker reset na 5 minuten
📝 Changelog
Version 1.2.0
- ✨ Nieuwe API Interface klasse toegevoegd
- 🛡️ Verbeterde beveiliging (input sanitization, output escaping)
- ⚡ Performance optimalisaties (transients, lazy loading)
- 🔒 Circuit breaker pattern toegevoegd
- 📊 Dashboard widget voor API monitoring
- 📚 Uitgebreide documentatie en voorbeelden
Version 1.1.0
- Basis functionaliteit
- Shortcode support
- Template systeem
🤝 Bijdragen
Suggesties en pull requests zijn welkom!
📄 Licentie
GPL v2 or later
👤 Auteur
Richard van der Meer Website: richardvandermeer.nl