SEO SIMPLE PACKの投稿別タイトルとディスクリプションを、対象投稿の編集権限のあるREST APIクライアントから更新する例です。メタ情報はeditコンテキストで読み取ります。
既存の登録とメタキーを確認
すでに別のプラグインやコードが同じメタキーをRESTへ登録している場合は二重登録しません。複製環境で投稿別設定を保存し、使用中のSEO SIMPLE PACKがssp_meta_titleとssp_meta_descriptionを使用していることを確認してください。robots・canonical・画像・キーワードはこの例の対象外です。
WordPress側に追加
専用プラグインまたは子テーマfunctions.phpへ追加します。既存PHP内では開始タグを省きます。標準投稿と固定ページを対象にし、カスタム投稿タイプ全体へ自動的に広げません。対象タイプにはcustom-fieldsサポートが必要です。
function waza_register_ssp_text_meta() {
foreach (array('post', 'page') as $type) {
foreach (array('ssp_meta_title', 'ssp_meta_description') as $key) {
register_post_meta($type, $key, array(
'type' => 'string', 'single' => true,
'sanitize_callback' => 'sanitize_text_field',
'show_in_rest' => array('schema' => array('type' => 'string', 'context' => array('edit'))),
'auth_callback' => function ($allowed, $meta_key, $post_id) {
return current_user_can('edit_post', $post_id);
},
));
}
}
}
add_action('init', 'waza_register_ssp_text_meta', 20);
認証して読み取り、変更する
HTTPSのREST APIへ対象投稿の編集権限を持つユーザーのアプリケーションパスワードで認証します。通常のログインパスワードは使いません。取得先は/wp-json/wp/v2/posts/123?context=edit&_fields=id,modified_gmt,meta、固定ページはpostsをpagesへ変更します。123は対象IDです。
更新前のメタ値とmodified_gmtを保存し、直前に再取得して他者の変更がないことを確認します。POST先は/wp-json/wp/v2/posts/123です。本文は次のJSONのように変更する項目だけを送ります。
{"meta":{"ssp_meta_description":"この記事の説明文です"}}空文字を送ればその項目の値を空にしますが、SEO SIMPLE PACKの自動生成へ戻るかなどの表示はプラグイン側の設定にも依存します。省略したキーを削除するリクエストではありません。
保存が成功しても表示が変わらないとき
| 確認対象 | 今回のHTTP検証 | 導入先での確認 |
|---|---|---|
| 権限とnonce | 編集者本人は保存でき、別の投稿者・不正nonceは403 | 対象投稿を編集できる認証ユーザーを使う |
| 未認証の取得 | edit取得を拒否し、viewで登録メタを非公開 | 読み取り権限を広げる変更がないか確認 |
| ディスクリプション | 保存値をサニタイズし、公開metaでエスケープ | 保存値とHTMLの違いを分けて確認 |
| 空文字とキー省略 | 空の説明は本文から生成され、省略したタイトルを保持 | 送信したキーだけが変更されたか再取得 |
| 公開HTML | キャッシュなしで実プラグインのtitleとdescriptionを確認 | WP Rocket・CDNなどを更新して未ログインで比較 |
保存済みのメタ値が新しく、公開HTMLだけが古い場合は、登録コードを書き換える前にキャッシュとSEO出力元を確認します。
WP Rocketを使っている場合の切り分けは、キャッシュと設定の確認手順を参照してください。
公開HTMLまで確認する
保存後はRESTの値だけでなく、公開ページのtitleとmeta descriptionも確認します。キャッシュや別のSEOプラグインの出力がある場合は分けて調べます。戻す場合は保存済みの値だけを競合確認後に戻し、不要なREST登録を停止します。登録を停止してもメタ値は削除されません。
2026年10月2日、WordPress 7.1.2・SEO SIMPLE PACK 3.7.0の隔離環境で、Cookie認証とREST nonceを使ったHTTPの保存・権限判定・公開HTMLへの反映を確認しました。
2026年10月3日には同じ版の隔離環境で、HTTPSのアプリケーションパスワードによる投稿・固定ページの更新、HTMLタグの除去、権限のない利用者の拒否、匿名読取でのメタ非表示、公開HTMLのtitleとdescriptionへの反映も確認しました。
WP Rocketのキャッシュを含む反映と、利用者のサイト固有の設定は未検証です。
GASのリクエスト処理はGASとREST APIによる更新例、登録仕様はWordPress公式資料を参照してください。
翻訳先を更新するときは別の投稿IDを指定する
Bogo 3.9.3で作成した翻訳投稿は、元記事とは別IDです。
隔離WordPress 7.1.2のREST処理で翻訳先IDへtitle・descriptionを送り、翻訳先だけが更新され、元記事の個別値を保持することを確認しました。
元記事のIDへ送ると元記事が更新対象になるため、URLの言語だけでIDを推測しません。
この登録例はcanonicalを対象に含めていません。
Bogoが複製した元記事の個別canonicalは、title・descriptionを更新してもそのまま残ります。
翻訳作成後のSEO設定の確認に従い、canonicalは個別設定と公開HTMLで別に確認します。
今回の追加検証は隔離環境のREST処理であり、多言語ページへのHTTPSクライアント接続やキャッシュを検証したものではありません。



