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!
No responses yet