vba-wordpress-upload

 WordPressのREST APIにVBAから投稿を送信するには、上で解説したコードをベースに、投稿用のJSONデータを組み立て、正しいエンドポイントURL認証トークンを使う必要があります。


目次

✅ WordPressにVBAから投稿する方法

🧩 必要なもの

  1. WordPressのREST APIエンドポイント
    例: https://example.com/wp-json/wp/v2/posts
  2. 認証トークン(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が含まれます。


🧰 必要な準備

  1. WordPressにログインできる権限のあるユーザー
  2. Bearerトークン(またはApplication Password)
  3. 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

💡補足

  • 画像の種類が PNGGIF の場合は Content-Type を変更してください。
    • PNG → image/png
    • GIF → image/gif

🔐 認証について

Bearerトークンを使う場合

  • ヘッダーに以下を設定:
.setRequestHeader "Authorization", "Bearer " & apiKey

Application Password(基本認証)の場合

  • Base64username: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> タグを含める形でも可能です。

よかったらシェアしてね!
目次