Wer regelmäßig Inhalte aus Datenquellen wie Access, Excel oder SQL Server in WordPress veröffentlichen möchte, stößt schnell an Grenzen mit klassischem Datenbankzugriff per ODBC. Deutlich eleganter, sicherer und zukunftssicherer funktioniert das über die offizielle WordPress REST API – sogar direkt aus VBA heraus.

In diesem Beitrag zeige ich, wie sich aus Microsoft Access oder Excel automatisch neue Beiträge oder Seiten in WordPress anlegen lassen – inklusive Titel, Inhalt, Kategorie und sogar einem Beitragsbild.

Voraussetzungen

  • WordPress ab Version 5.6
  • Ein Benutzer mit der Rolle Autor oder Editor
  • Ein Anwendungs-Passwort, das unter „Benutzer > Dein Benutzer > Anwendungs-Passwörter“ erstellt werden kann
  • In VBA ein gesetzter Verweis auf Microsoft XML, v6.0 (Extras > Verweise)

Die Funktion in VBA

Die folgende Funktion erstellt einen neuen Beitrag oder eine Seite über die REST API:

Public Function WP_CreatePost(ByVal isPage As Boolean, ByVal title As String, _
                              ByVal content As String, ByVal categoryID As Long, _
                              ByVal featuredMediaID As Long, _
                              Optional ByVal status As String = "publish") As String
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    Dim url As String
    If isPage Then
        url = "https://deine-domain.de/wp-json/wp/v2/pages"
    Else
        url = "https://deine-domain.de/wp-json/wp/v2/posts"
    End If
    
    ' Authentifizierung
    Dim user As String: user = "deinbenutzername"
    Dim appPassword As String: appPassword = "dein_app_passwort"
    Dim credentials As String
    credentials = Base64Encode(user & ":" & appPassword)
    
    ' JSON-Body
    ' content und title dürfen keine einzelnen " enthalten => kapseln
    Dim jsonBody As String
    jsonBody = "{""title"": """ & title & """, " & _
               """content"": """ & content & """, " & _
               """status"": """ & status & """, " & _
               IIf(isPage, "", """categories"": [" & categoryID & "], ") & _
               """featured_media"": " & featuredMediaID & "}"
    
    ' HTTP POST
    With http
        .Open "POST", url, False
        .setRequestHeader "Authorization", "Basic " & credentials
        .setRequestHeader "Content-Type", "application/json"
        .send jsonBody
    End With

    ' Ergebnis prüfen
    If http.Status = 201 Then
        WP_CreatePost = "Erfolgreich erstellt: " & http.responseText
    Else
        WP_CreatePost = "Fehler " & http.Status & ": " & http.responseText
    End If
End Function

Die Funktion unterscheidet über isPage, ob ein Beitrag (False) oder eine Seite (True) erstellt wird.

Helferfunktion: Base64-Encode für die Authentifizierung

Private Function Base64Encode(text As String) As String
    Dim bytes() As Byte
    bytes = StrConv(text, vbFromUnicode)
    
    Dim objXML As Object
    Dim objNode As Object
    Set objXML = CreateObject("MSXML2.DOMDocument")
    Set objNode = objXML.createElement("b64")
    objNode.DataType = "bin.base64"
    objNode.nodeTypedValue = bytes
    Base64Encode = Replace(objNode.Text, vbLf, "")
End Function

Beispielaufruf

Sub Test_CreatePost()
    Dim result As String
    result = WP_CreatePost(False, "Mein API-Beitrag", _
        "Dies ist der <strong>Inhalt</strong> per Access-API.", _
        3,    ' Kategorie-ID
        123)  ' Beitragsbild-ID (Media ID)
        
    MsgBox result
End Sub

Die WordPress REST API eröffnet viele Automatisierungsmöglichkeiten – auch aus klassischen Office-Anwendungen heraus. So lassen sich regelmäßig generierte Inhalte direkt aus Access oder Excel online veröffentlichen, ohne Umwege über die Datenbank oder das Backend.

eile in den Kommentaren Deine Erfahrungen mit der WordPress API und VBA!

Tags:

No responses yet

Schreibe einen Kommentar

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