RESTful API-Bridge: Wie ich WordPress-Daten in Access-Funktionen integriere

Warum ich das mache

WordPress kennt keine JOINs, keine parametrisierten Reports, kein VBA.
Access dagegen kann das alles – wenn die Daten erst mal da sind.
Statt direkt auf die MySQL-Datenbank zuzugreifen, gehe ich ĂŒber die REST-API.
Ist robuster, firewallfreundlich, HTTPS-basiert. Und Du hast volle Kontrolle ĂŒber die Datenstruktur.

1. WordPress-Daten verfĂŒgbar machen

Custom REST-Endpunkt in WordPress

Du brauchst einen Endpunkt, der Dir gezielt Daten gibt.
Nicht alles, nicht wild – sondern das, was Du brauchst.

add_action('rest_api_init', function () {
    register_rest_route('myplugin/v1', '/kunden/', [
        'methods' => 'GET',
        'callback' => 'meine_kunden_liste',
        'permission_callback' => '__return_true'
    ]);
});

function meine_kunden_liste($data) {
    global $wpdb;
    $results = $wpdb->get_results("
        SELECT ID, display_name, user_email
        FROM {$wpdb->prefix}users
        WHERE user_status = 0
    ", ARRAY_A);
    return $results;
}

Der Endpunkt liefert nun JSON:
https://deine-seite.de/wp-json/myplugin/v1/kunden

2. Zugriff auf die API per VBA

Daten abrufen

Function HoleJson(URL As String) As String
    Dim http As Object
    Set http = CreateObject("WinHttp.WinHttpRequest.5.1")
    
    http.Open "GET", URL, False
    http.Send
    
    If http.Status = 200 Then
        HoleJson = http.ResponseText
    Else
        HoleJson = ""
    End If
End Function

JSON verarbeiten

Ich verwende dafĂŒr den JSON-Parser „VBA-JSON“ von Tim Hall.
Einbindung als Modul (JsonConverter.bas).

Dann:

Sub ImportiereKunden()
    Dim jsonText As String
    Dim json As Object
    Dim eintrag As Variant
    Dim db As DAO.Database
    Dim rst As DAO.Recordset

    jsonText = HoleJson("https://deine-seite.de/wp-json/myplugin/v1/kunden")
    Set json = JsonConverter.ParseJson(jsonText)

    Set db = CurrentDb
    Set rst = db.OpenRecordset("kunden_import", dbOpenDynaset)

    For Each eintrag In json
        rst.AddNew
        rst!wp_id = eintrag("ID")
        rst!name = eintrag("display_name")
        rst!email = eintrag("user_email")
        rst.Update
    Next
End Sub

3. Funktion in Access verfĂŒgbar machen

Jetzt kannst Du die Daten wie gewohnt in Formulare, Reports oder Abfragen einbinden.
Beispiel: Dropdown in einem Kombinationsfeld mit aktuellen WP-Nutzern.

SELECT name FROM kunden_import ORDER BY name;

Oder als Lookup in einem Formularfeld.
Oder zur VerknĂŒpfung mit lokal gepflegten Stammdaten.

4. Optional: API-Parameter verwenden

Du kannst REST-Endpunkte mit Parametern bauen:

register_rest_route('myplugin/v1', '/kunden/(?P<email>[a-zA-Z0-9@._-]+)/', [
    'methods' => 'GET',
    'callback' => 'kunde_by_email',
    'permission_callback' => '__return_true'
]);

function kunde_by_email($data) {
    $email = sanitize_email($data['email']);
    global $wpdb;
    return $wpdb->get_row("
        SELECT ID, display_name
        FROM {$wpdb->prefix}users
        WHERE user_email = '{$email}'
    ", ARRAY_A);
}

Dann in VBA:

Dim url As String
url = "https://deine-seite.de/wp-json/myplugin/v1/kunden/test@firma.de"

5. Fehlerbehandlung und Logging

Ich logge alle REST-Zugriffe in eine kleine Tabelle rest_log.

Sub LogRequest(URL As String, Antwort As String)
    CurrentDb.Execute "INSERT INTO rest_log (zeitpunkt, url, inhalt) " & _
                      "VALUES (Now(), '" & URL & "', '" & Replace(Antwort, "'", "''") & "')"
End Sub

So siehst Du auch spÀter, ob WordPress Mist gebaut hat.
Oder ob Du selbst geschlafen hast.

Mein Tipp

Wenn Du die Kontrolle brauchst, nimm REST.
Wenn es schnell gehen muss, nimm ODBC.
Aber wenn Du WordPress mehrfach integrieren willst – REST ist der sauberste Weg.
Du definierst, was reinkommt. Und Access frisst es.

Kategorien:

Schlagwörter:

Keine Antworten

Schreibe einen Kommentar

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