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
🔑 認証についての補足
方法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")
🎁 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
✅ 実行結果
成功すれば、指定した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
📦 結果(レスポンス例)
アップロード成功時、次のような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
を取得して、投稿の 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
💡補足
- 画像の種類が
PNG
やGIF
の場合はContent-Type
を変更してください。- PNG →
image/png
- GIF →
image/gif
- PNG →
🔐 認証について
Bearerトークンを使う場合
- ヘッダーに以下を設定:
.setRequestHeader "Authorization", "Bearer " & apiKey
Application Password(基本認証)の場合
Base64
でusername: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
🔧 補助関数:画像アップロード + 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
🔍 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
✅ 結果
これで、投稿にアイキャッチ画像が設定された状態で公開されます。
WordPressの投稿一覧やトップページで、ちゃんとサムネイルが出るはずです。
💡補足
- 投稿後、レスポンスの中に
featured_media
付きのpost ID
なども含まれています。 - 投稿本文にも画像を表示したい場合は、
content
に<img>
タグを含める形でも可能です。