スプレッドシートからWordPressの下書きを作る場合は、投稿する行を明示し、作成した投稿IDを必ず記録します。通信が失敗したように見えても、WordPress側で下書きができている可能性があるためです。
まずは公開ではなく下書き作成に絞り、タイトル、本文、対象サイト、投稿後の確認をそろえます。
投稿台帳の列を決める
| 列 | 内容 |
|---|---|
| A: 管理ID | シート側の処理を識別する値 |
| B: タイトル | 下書きのタイトル |
| C: 本文HTML | 確認済みの本文 |
| D: 承認 | 「承認」の行だけを対象にする |
| E: 投稿ID | 作成後に受け取ったID |
| F: 状態 | 未処理、処理中、作成済み、確認待ち、保留 |
管理IDとWordPressの投稿IDは別の値です。並べ替えで行が変わっても、管理IDから対応を調べられるようにします。送信後に本文を直した場合も、入力の版を残します。
下書き用のデータを作る
次は行の配列から本文を組み立てる例です。APIを呼び出す処理は含みません。
function wpDraftFromRow(row) {
if (row[3] !== "承認" || row[4] !== "" || row[5] !== "未処理") return null;
if (typeof row[1] !== "string" || !row[1].trim() ||
typeof row[2] !== "string" || !row[2].trim()) {
throw new Error("タイトルと本文を確認してください");
}
const id = String(row[0] ?? "").trim();
if (!id) throw new Error("管理IDがありません");
return {
managementId: id,
payload: { title: row[1], content: row[2], status: "draft" }
};
}
返したmanagementIdは自分の台帳用です。WordPressへ送るJSONはpayloadの中身だけにします。本文に画像やリンクがある場合は、送信前に参照先と権利、表示内容を確認します。
認証と送信を分ける
WordPressの投稿API資料では、POST /wp/v2/postsで投稿を作成できます。サイトのREST APIのURLに合わせ、通常は /wp-json/wp/v2/postsを使います。
公式の認証資料を確認し、HTTPSと、権限を絞った利用者、承認されたアプリケーションパスワードを使用します。値はシートに置かず、GASの設定などへ分けます。設定へアクセスできる編集者も管理します。
GASのUrlFetchAppで、methodをpost、contentTypeをapplication/jsonとし、JSON.stringifyでpayloadを本文へ変換します。認証ヘッダーや要求全体をログへ出さないようにします。
応答から投稿IDを保存する
HTTPコードと応答を検査し、返されたidとlink、statusを管理IDへ対応させます。応答を受け取る前に「作成済み」と記録しないようにします。
保存した投稿IDから内容を取得するか、管理画面で下書きを開きます。タイトル、本文、画像、リンク、ブロック表示、下書き状態を確認します。APIの成功だけでは、意図した表示になったことまでは分かりません。
時間切れと再実行の扱い
送信後に時間切れになった行を、投稿IDが空だからと自動で再送しないようにします。処理ID、送信時刻、タイトル、対象サイトを使って、作成された下書きを確認します。曖昧な場合は保留にします。
複数人が同時に動かす場合は、対象取得と処理中への変更を一つの管理区間へまとめます。1回の件数と試行回数を制限し、手動で変更された行は入力の版で照合します。
公開の前に人が確認する
この処理の到達点は、内容を確認できる下書きです。公開日時、カテゴリー、アイキャッチなどを追加する場合は、利用する項目をAPI資料で確認し、既存の設定を勝手に置き換えないようにします。
接続の全体像はGASからWordPressへ投稿する解説、投稿APIの前提はWordPress REST APIの基本も参考になります。
