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 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:

CPTFelder
angebotstatus, erstellt_am, freigegeben_am, summe_netto
supportbearbeiter_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

AnalyseAussage
⏱ AngebotslaufzeitReaktionsgeschwindigkeit im Vertrieb
📥 Anzahl neuer Anfragen/WocheKapazitätsplanung
💬 Tickets pro BearbeiterAuslastung im Support
📈 Umsatz nach Kunde / WocheVertriebswertanalyse
⏳ Auftrag → LieferungProzessdauer 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.

Categories:

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert