WordPressのREST APIにVBAから投稿を送信するには、上で解説したコードをベースに、投稿用のJSONデータを組み立て、正しいエンドポイントURLと認証トークンを使う必要があります。
目次
✅ WordPressにVBAから投稿する方法
🧩 必要なもの
- WordPressのREST APIエンドポイント
例:https://example.com/wp-json/wp/v2/posts
- 認証トークン(Bearerトークン)
- WordPressでJWT認証やApplication Passwordなどを有効にする必要があります。
- プラグイン例:「JWT Authentication for WP REST API」
📦 VBAサンプルコード(WordPress投稿用)
Sub PostToWordPress()
Dim http As Object
Dim url As String
Dim apiKey As String
Dim data As String
Dim response As String
' WordPressの投稿エンドポイント
url = "https://example.com/wp-json/wp/v2/posts"
' 認証用Bearerトークン(またはApplication PasswordをBase64エンコードしたもの)
apiKey = "YOUR_API_KEY_HERE"
' 投稿データ(JSON形式)
data = "{""title"":""VBAからの投稿""," & _
"""content"":""これはVBAから投稿された記事です。""," & _
"""status"":""publish""}"
' HTTPリクエスト作成と送信
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", url, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send data
response = .responseText
End With
MsgBox "Response: " & response
End Sub
Sub PostToWordPress()
Dim http As Object
Dim url As String
Dim apiKey As String
Dim data As String
Dim response As String
' WordPressの投稿エンドポイント
url = "https://example.com/wp-json/wp/v2/posts"
' 認証用Bearerトークン(またはApplication PasswordをBase64エンコードしたもの)
apiKey = "YOUR_API_KEY_HERE"
' 投稿データ(JSON形式)
data = "{""title"":""VBAからの投稿""," & _
"""content"":""これはVBAから投稿された記事です。""," & _
"""status"":""publish""}"
' HTTPリクエスト作成と送信
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", url, False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send data
response = .responseText
End With
MsgBox "Response: " & response
End Sub
Sub PostToWordPress() Dim http As Object Dim url As String Dim apiKey As String Dim data As String Dim response As String ' WordPressの投稿エンドポイント url = "https://example.com/wp-json/wp/v2/posts" ' 認証用Bearerトークン(またはApplication PasswordをBase64エンコードしたもの) apiKey = "YOUR_API_KEY_HERE" ' 投稿データ(JSON形式) data = "{""title"":""VBAからの投稿""," & _ """content"":""これはVBAから投稿された記事です。""," & _ """status"":""publish""}" ' HTTPリクエスト作成と送信 Set http = CreateObject("MSXML2.XMLHTTP") With http .Open "POST", url, False .setRequestHeader "Content-Type", "application/json" .setRequestHeader "Authorization", "Bearer " & apiKey .Send data response = .responseText End With MsgBox "Response: " & response End Sub
🔑 認証についての補足
方法1:JWT(Bearer)トークン
- WordPressにプラグインをインストールして有効化(例:JWT Authentication)。
- ログインして取得したトークンを
apiKey
にセット。
方法2:アプリケーションパスワード(WordPress 5.6+)
- WordPressユーザー設定でアプリケーションパスワードを作成。
apiKey
には次の形式でBase64エンコードした文字列を使います:
' 例: "username:application-password" をBase64エンコード
' Authorizationヘッダーにはこう書く:
.setRequestHeader "Authorization", "Basic " & Base64Encode("username:app-password")
' 例: "username:application-password" をBase64エンコード
' Authorizationヘッダーにはこう書く:
.setRequestHeader "Authorization", "Basic " & Base64Encode("username:app-password")
' 例: "username:application-password" をBase64エンコード ' Authorizationヘッダーにはこう書く: .setRequestHeader "Authorization", "Basic " & Base64Encode("username:app-password")
🎁 Base64エンコードの関数(VBA用)
Function Base64Encode(text As String) As String
Dim arrData() As Byte
Dim objXML As Object
Dim objNode As Object
arrData = StrConv(text, vbFromUnicode)
Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
Base64Encode = Replace(objNode.Text, vbLf, "")
Set objNode = Nothing
Set objXML = Nothing
End Function
Function Base64Encode(text As String) As String
Dim arrData() As Byte
Dim objXML As Object
Dim objNode As Object
arrData = StrConv(text, vbFromUnicode)
Set objXML = CreateObject("MSXML2.DOMDocument")
Set objNode = objXML.createElement("b64")
objNode.DataType = "bin.base64"
objNode.nodeTypedValue = arrData
Base64Encode = Replace(objNode.Text, vbLf, "")
Set objNode = Nothing
Set objXML = Nothing
End Function
Function Base64Encode(text As String) As String Dim arrData() As Byte Dim objXML As Object Dim objNode As Object arrData = StrConv(text, vbFromUnicode) Set objXML = CreateObject("MSXML2.DOMDocument") Set objNode = objXML.createElement("b64") objNode.DataType = "bin.base64" objNode.nodeTypedValue = arrData Base64Encode = Replace(objNode.Text, vbLf, "") Set objNode = Nothing Set objXML = Nothing End Function
✅ 実行結果
成功すれば、指定したWordPressサイトに公開済みの新規投稿が作成されます。失敗した場合は、APIレスポンス内にエラーが返るので response
を確認してください。
必要であれば、画像を一緒にアップロードする方法や、カスタムフィールドを含める方法も説明できますよ。興味あります?
VBAでWordPressに画像をアップロードする方法を、必要な部分からステップバイステップで丁寧に解説します。
✅ 目的
VBAからWordPress REST APIを使って、画像ファイル(JPEGなど)を「メディア」としてアップロードする。
アップロード成功後、WordPressからJSONレスポンスが返され、そこに画像のIDやURLが含まれます。
🧰 必要な準備
- WordPressにログインできる権限のあるユーザー
- Bearerトークン(またはApplication Password)
- WordPressにインストール済みのJWTプラグインなど(認証方法による)
🧑💻 サンプルVBAコード(画像アップロード)
Sub UploadImageToWordPress()
Dim http As Object
Dim fileStream As Object
Dim fileBytes() As Byte
Dim apiKey As String
Dim imagePath As String
Dim fileName As String
Dim siteUrl As String
Dim response As String
' === 設定部分 ===
siteUrl = "https://your-site.com" ' ← WordPressのURLに置き換える
apiKey = "YOUR_BEARER_TOKEN" ' ← Bearerトークンに置き換える
imagePath = "C:\path\to\image.jpg" ' ← 画像のファイルパスに置き換える
fileName = Dir(imagePath)
' === 画像読み込み ===
Set fileStream = CreateObject("ADODB.Stream")
fileStream.Type = 1 ' バイナリ
fileStream.Open
fileStream.LoadFromFile imagePath
fileBytes = fileStream.Read
fileStream.Close
' === HTTPリクエスト作成 ===
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", siteUrl & "/wp-json/wp/v2/media", False
.setRequestHeader "Content-Type", "image/jpeg"
.setRequestHeader "Content-Disposition", "attachment; filename=""" & fileName & """"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send fileBytes
response = .responseText
End With
' === 結果表示 ===
MsgBox "Upload response: " & vbCrLf & response
End Sub
Sub UploadImageToWordPress()
Dim http As Object
Dim fileStream As Object
Dim fileBytes() As Byte
Dim apiKey As String
Dim imagePath As String
Dim fileName As String
Dim siteUrl As String
Dim response As String
' === 設定部分 ===
siteUrl = "https://your-site.com" ' ← WordPressのURLに置き換える
apiKey = "YOUR_BEARER_TOKEN" ' ← Bearerトークンに置き換える
imagePath = "C:\path\to\image.jpg" ' ← 画像のファイルパスに置き換える
fileName = Dir(imagePath)
' === 画像読み込み ===
Set fileStream = CreateObject("ADODB.Stream")
fileStream.Type = 1 ' バイナリ
fileStream.Open
fileStream.LoadFromFile imagePath
fileBytes = fileStream.Read
fileStream.Close
' === HTTPリクエスト作成 ===
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", siteUrl & "/wp-json/wp/v2/media", False
.setRequestHeader "Content-Type", "image/jpeg"
.setRequestHeader "Content-Disposition", "attachment; filename=""" & fileName & """"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send fileBytes
response = .responseText
End With
' === 結果表示 ===
MsgBox "Upload response: " & vbCrLf & response
End Sub
Sub UploadImageToWordPress() Dim http As Object Dim fileStream As Object Dim fileBytes() As Byte Dim apiKey As String Dim imagePath As String Dim fileName As String Dim siteUrl As String Dim response As String ' === 設定部分 === siteUrl = "https://your-site.com" ' ← WordPressのURLに置き換える apiKey = "YOUR_BEARER_TOKEN" ' ← Bearerトークンに置き換える imagePath = "C:\path\to\image.jpg" ' ← 画像のファイルパスに置き換える fileName = Dir(imagePath) ' === 画像読み込み === Set fileStream = CreateObject("ADODB.Stream") fileStream.Type = 1 ' バイナリ fileStream.Open fileStream.LoadFromFile imagePath fileBytes = fileStream.Read fileStream.Close ' === HTTPリクエスト作成 === Set http = CreateObject("MSXML2.XMLHTTP") With http .Open "POST", siteUrl & "/wp-json/wp/v2/media", False .setRequestHeader "Content-Type", "image/jpeg" .setRequestHeader "Content-Disposition", "attachment; filename=""" & fileName & """" .setRequestHeader "Authorization", "Bearer " & apiKey .Send fileBytes response = .responseText End With ' === 結果表示 === MsgBox "Upload response: " & vbCrLf & response End Sub
📦 結果(レスポンス例)
アップロード成功時、次のようなJSONが返されます:
{
"id": 123,
"date": "2025-04-05T12:00:00",
"slug": "image",
"link": "https://your-site.com/wp-content/uploads/2025/04/image.jpg",
"title": { "rendered": "image" },
...
}
{
"id": 123,
"date": "2025-04-05T12:00:00",
"slug": "image",
"link": "https://your-site.com/wp-content/uploads/2025/04/image.jpg",
"title": { "rendered": "image" },
...
}
{ "id": 123, "date": "2025-04-05T12:00:00", "slug": "image", "link": "https://your-site.com/wp-content/uploads/2025/04/image.jpg", "title": { "rendered": "image" }, ... }
この id
を取得して、投稿の featured_media
に使えば「アイキャッチ画像」として設定できます。
✅ 応用:画像IDを抽出する関数
簡単なID抽出方法も紹介しておきます:
Function ExtractMediaId(json As String) As String
Dim idPos As Long
idPos = InStr(json, """id"":")
If idPos > 0 Then
ExtractMediaId = Mid(json, idPos + 5, InStr(idPos, json, ",") - idPos - 5)
Else
ExtractMediaId = "0"
End If
End Function
Function ExtractMediaId(json As String) As String
Dim idPos As Long
idPos = InStr(json, """id"":")
If idPos > 0 Then
ExtractMediaId = Mid(json, idPos + 5, InStr(idPos, json, ",") - idPos - 5)
Else
ExtractMediaId = "0"
End If
End Function
Function ExtractMediaId(json As String) As String Dim idPos As Long idPos = InStr(json, """id"":") If idPos > 0 Then ExtractMediaId = Mid(json, idPos + 5, InStr(idPos, json, ",") - idPos - 5) Else ExtractMediaId = "0" End If End Function
💡補足
- 画像の種類が
PNG
やGIF
の場合はContent-Type
を変更してください。- PNG →
image/png
- GIF →
image/gif
- PNG →
🔐 認証について
Bearerトークンを使う場合
- ヘッダーに以下を設定:
.setRequestHeader "Authorization", "Bearer " & apiKey
.setRequestHeader "Authorization", "Bearer " & apiKey
.setRequestHeader "Authorization", "Bearer " & apiKey
Application Password(基本認証)の場合
Base64
でusername:password
をエンコードして使います:
.setRequestHeader "Authorization", "Basic " & Base64Encode("username:app-password")
.setRequestHeader "Authorization", "Basic " & Base64Encode("username:app-password")
.setRequestHeader "Authorization", "Basic " & Base64Encode("username:app-password")
🎯 次のステップ
- この画像IDを使って投稿にアイキャッチをつけたい?
- 投稿本文に画像を挿入したい?
完璧です!
それでは、先ほどアップロードした画像の 画像ID を使って、WordPress投稿に「アイキャッチ画像(featured image)」を設定する方法を紹介します。
✅ ゴール
- 画像アップロード後に得られた 画像ID を使って、
- 投稿作成時に
featured_media
フィールドにそのIDを設定し、 - 投稿に アイキャッチ画像 を付ける。
🧑💻 投稿作成VBAコード(画像ID付き)
以下は、画像をアップロードして、そのIDを投稿に使う一連の流れを含むVBAコードです。
Sub PostWithFeaturedImage()
Dim siteUrl As String
Dim apiKey As String
Dim imagePath As String
Dim imageResponse As String
Dim imageId As String
Dim postJson As String
Dim http As Object
Dim response As String
' 設定
siteUrl = "https://your-site.com" ' ← WordPressのURLに置き換え
apiKey = "YOUR_BEARER_TOKEN" ' ← Bearerトークンに置き換え
imagePath = "C:\path\to\image.jpg" ' ← 画像パスに置き換え
' 画像アップロード
imageResponse = UploadImageToWordPress(imagePath, siteUrl, apiKey)
imageId = ExtractMediaId(imageResponse)
' 投稿用JSON
postJson = "{""title"":""画像付きの投稿""," & _
"""content"":""これはアイキャッチ画像付きの投稿です。""," & _
"""status"":""publish""," & _
"""featured_media"":" & imageId & "}"
' 投稿送信
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", siteUrl & "/wp-json/wp/v2/posts", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send postJson
response = .responseText
End With
MsgBox "投稿成功: " & vbCrLf & response
End Sub
Sub PostWithFeaturedImage()
Dim siteUrl As String
Dim apiKey As String
Dim imagePath As String
Dim imageResponse As String
Dim imageId As String
Dim postJson As String
Dim http As Object
Dim response As String
' 設定
siteUrl = "https://your-site.com" ' ← WordPressのURLに置き換え
apiKey = "YOUR_BEARER_TOKEN" ' ← Bearerトークンに置き換え
imagePath = "C:\path\to\image.jpg" ' ← 画像パスに置き換え
' 画像アップロード
imageResponse = UploadImageToWordPress(imagePath, siteUrl, apiKey)
imageId = ExtractMediaId(imageResponse)
' 投稿用JSON
postJson = "{""title"":""画像付きの投稿""," & _
"""content"":""これはアイキャッチ画像付きの投稿です。""," & _
"""status"":""publish""," & _
"""featured_media"":" & imageId & "}"
' 投稿送信
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", siteUrl & "/wp-json/wp/v2/posts", False
.setRequestHeader "Content-Type", "application/json"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send postJson
response = .responseText
End With
MsgBox "投稿成功: " & vbCrLf & response
End Sub
Sub PostWithFeaturedImage() Dim siteUrl As String Dim apiKey As String Dim imagePath As String Dim imageResponse As String Dim imageId As String Dim postJson As String Dim http As Object Dim response As String ' 設定 siteUrl = "https://your-site.com" ' ← WordPressのURLに置き換え apiKey = "YOUR_BEARER_TOKEN" ' ← Bearerトークンに置き換え imagePath = "C:\path\to\image.jpg" ' ← 画像パスに置き換え ' 画像アップロード imageResponse = UploadImageToWordPress(imagePath, siteUrl, apiKey) imageId = ExtractMediaId(imageResponse) ' 投稿用JSON postJson = "{""title"":""画像付きの投稿""," & _ """content"":""これはアイキャッチ画像付きの投稿です。""," & _ """status"":""publish""," & _ """featured_media"":" & imageId & "}" ' 投稿送信 Set http = CreateObject("MSXML2.XMLHTTP") With http .Open "POST", siteUrl & "/wp-json/wp/v2/posts", False .setRequestHeader "Content-Type", "application/json" .setRequestHeader "Authorization", "Bearer " & apiKey .Send postJson response = .responseText End With MsgBox "投稿成功: " & vbCrLf & response End Sub
🔧 補助関数:画像アップロード + ID抽出
以下の2つの関数を一緒に使ってください:
📤 UploadImageToWordPress
Function UploadImageToWordPress(imagePath As String, siteUrl As String, apiKey As String) As String
Dim http As Object
Dim fileStream As Object
Dim fileBytes() As Byte
Dim fileName As String
Dim response As String
fileName = Dir(imagePath)
Set fileStream = CreateObject("ADODB.Stream")
fileStream.Type = 1 ' Binary
fileStream.Open
fileStream.LoadFromFile imagePath
fileBytes = fileStream.Read
fileStream.Close
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", siteUrl & "/wp-json/wp/v2/media", False
.setRequestHeader "Content-Type", "image/jpeg"
.setRequestHeader "Content-Disposition", "attachment; filename=""" & fileName & """"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send fileBytes
response = .responseText
End With
UploadImageToWordPress = response
End Function
Function UploadImageToWordPress(imagePath As String, siteUrl As String, apiKey As String) As String
Dim http As Object
Dim fileStream As Object
Dim fileBytes() As Byte
Dim fileName As String
Dim response As String
fileName = Dir(imagePath)
Set fileStream = CreateObject("ADODB.Stream")
fileStream.Type = 1 ' Binary
fileStream.Open
fileStream.LoadFromFile imagePath
fileBytes = fileStream.Read
fileStream.Close
Set http = CreateObject("MSXML2.XMLHTTP")
With http
.Open "POST", siteUrl & "/wp-json/wp/v2/media", False
.setRequestHeader "Content-Type", "image/jpeg"
.setRequestHeader "Content-Disposition", "attachment; filename=""" & fileName & """"
.setRequestHeader "Authorization", "Bearer " & apiKey
.Send fileBytes
response = .responseText
End With
UploadImageToWordPress = response
End Function
Function UploadImageToWordPress(imagePath As String, siteUrl As String, apiKey As String) As String Dim http As Object Dim fileStream As Object Dim fileBytes() As Byte Dim fileName As String Dim response As String fileName = Dir(imagePath) Set fileStream = CreateObject("ADODB.Stream") fileStream.Type = 1 ' Binary fileStream.Open fileStream.LoadFromFile imagePath fileBytes = fileStream.Read fileStream.Close Set http = CreateObject("MSXML2.XMLHTTP") With http .Open "POST", siteUrl & "/wp-json/wp/v2/media", False .setRequestHeader "Content-Type", "image/jpeg" .setRequestHeader "Content-Disposition", "attachment; filename=""" & fileName & """" .setRequestHeader "Authorization", "Bearer " & apiKey .Send fileBytes response = .responseText End With UploadImageToWordPress = response End Function
🔍 ExtractMediaId
Function ExtractMediaId(json As String) As String
Dim idPos As Long
idPos = InStr(json, """id"":")
If idPos > 0 Then
ExtractMediaId = Mid(json, idPos + 5, InStr(idPos, json, ",") - idPos - 5)
Else
ExtractMediaId = "0"
End If
End Function
Function ExtractMediaId(json As String) As String
Dim idPos As Long
idPos = InStr(json, """id"":")
If idPos > 0 Then
ExtractMediaId = Mid(json, idPos + 5, InStr(idPos, json, ",") - idPos - 5)
Else
ExtractMediaId = "0"
End If
End Function
Function ExtractMediaId(json As String) As String Dim idPos As Long idPos = InStr(json, """id"":") If idPos > 0 Then ExtractMediaId = Mid(json, idPos + 5, InStr(idPos, json, ",") - idPos - 5) Else ExtractMediaId = "0" End If End Function
✅ 結果
これで、投稿にアイキャッチ画像が設定された状態で公開されます。
WordPressの投稿一覧やトップページで、ちゃんとサムネイルが出るはずです。
💡補足
- 投稿後、レスポンスの中に
featured_media
付きのpost ID
なども含まれています。 - 投稿本文にも画像を表示したい場合は、
content
に<img>
タグを含める形でも可能です。