Warum Custom Reporting? Weil Standarddaten nichts sagen
Du willst nicht wissen, wie viele Seitenaufrufe Du hattest.
Du willst wissen:
- Welche Anfragen wurden wie bearbeitet
- Wer war wie aktiv
- Welche Produkte liefen wo wie gut
- Wie lange Prozesse intern brauchen
Mit Standard-Plugins/“>Plugins kommst Du da nicht weit.
Aber mit einem eigenen Analyse-Plugin schon.
Struktur: CPTs + benutzerdefinierte Daten als Basis
Du nutzt WordPress für CRM, Support, Angebote oder Bestellungen?
Dann hast Du schon die Daten.
Du musst sie nur auswerten.
Beispielhafte Felder:
| CPT | Felder |
|---|---|
angebot | status, erstellt_am, freigegeben_am, summe_netto |
support | bearbeiter_id, status, zeit_erstellt, zeit_geschlossen |
Reporting-Seite als Admin-Menü
add_action('admin_menu', function() {
add_menu_page('Auswertungen', 'Reporting', 'manage_options', 'ds_reporting', 'ds_reporting_page');
});
Analyse-Logik: Beispiel Angebotsdurchlaufzeit
function ds_reporting_page() {
global $wpdb;
$result = $wpdb->get_results("
SELECT
pm1.post_id,
MIN(CASE WHEN pm1.meta_key = 'erstellt_am' THEN pm1.meta_value END) AS erstellt,
MIN(CASE WHEN pm2.meta_key = 'freigegeben_am' THEN pm2.meta_value END) AS freigegeben
FROM {$wpdb->postmeta} pm1
JOIN {$wpdb->postmeta} pm2 ON pm1.post_id = pm2.post_id
WHERE pm1.meta_key IN ('erstellt_am') AND pm2.meta_key IN ('freigegeben_am')
GROUP BY pm1.post_id
");
echo '<h2>Angebotsdurchlaufzeiten</h2>';
echo '<table><tr><th>ID</th><th>Erstellt</th><th>Freigegeben</th><th>Dauer (Tage)</th></tr>';
foreach ($result as $row) {
$tage = (strtotime($row->freigegeben) - strtotime($row->erstellt)) / 86400;
echo "<tr><td>{$row->post_id}</td><td>{$row->erstellt}</td><td>{$row->freigegeben}</td><td>" . round($tage, 1) . "</td></tr>";
}
echo '</table>';
}
Erweiterung: Filter nach Zeitraum
<form method="get">
<input type="hidden" name="page" value="ds_reporting">
<label>Von: <input type="date" name="von" value="<?php echo esc_attr($_GET['von'] ?? ''); ?>"></label>
<label>Bis: <input type="date" name="bis" value="<?php echo esc_attr($_GET['bis'] ?? ''); ?>"></label>
<button type="submit">Filtern</button>
</form>
Dann $_GET['von'] und $_GET['bis'] im SQL-Query berücksichtigen.
Visualisierung per Diagramm
Du kannst z. B. chart.js über das Admin-Backend einbinden.
add_action('admin_enqueue_scripts', function($hook) {
if ($hook === 'toplevel_page_ds_reporting') {
wp_enqueue_script('chartjs', 'https://cdn.jsdelivr.net/npm/chart.js', [], null);
}
});
Dann im HTML:
<canvas id="dsChart" width="400" height="200"></canvas>
<script>
const ctx = document.getElementById('dsChart');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['KW14', 'KW15', 'KW16'],
datasets: [{
label: 'Durchschnittliche Angebotszeit (Tage)',
data: [3.5, 2.2, 4.1]
}]
}
});
</script>
Weitere Metriken für KMU-Prozesse
| Analyse | Aussage |
|---|---|
| ⏱ Angebotslaufzeit | Reaktionsgeschwindigkeit im Vertrieb |
| 📥 Anzahl neuer Anfragen/Woche | Kapazitätsplanung |
| 💬 Tickets pro Bearbeiter | Auslastung im Support |
| 📈 Umsatz nach Kunde / Woche | Vertriebswertanalyse |
| ⏳ Auftrag → Lieferung | Prozessdauer Produktion / Logistik |
Mein Fazit
Wenn Du schon Daten im WordPress hast, dann wert sie auch aus.
Du brauchst keine BI-Suite – Du brauchst eine saubere Reporting-Seite.
Mit PHP, SQL und etwas JS baust Du Dir genau das, was Du brauchst.
Wenn Du willst, helf ich Dir dabei. Dann siehst Du, was vorher nur Bauchgefühl war.