WordPress | wp_remote_post()で記事や固定ページを投稿する方法
WP REST API v2のwp_remote_post()API関数を使ってWordPressに記事や固定ページを投稿する方法の紹介とサンプルコードです。
wp_remote_post()で投稿するサンプルコード
require_once( '../wp-load.php' );
$url = 'https://example.com/wp-json/wp/v2/posts';
$username = 'xxxxx';
$password = 'xxxx xxxx xxxx xxxx xxxx xxxx';
$title = '記事タイトル';
$content = '記事本文';
$category_id = [1];
$tag_id = [1];
$slug = 'slug';
$response = wp_remote_post( $url, array(
'headers' => array(
'Authorization' => 'Basic ' . base64_encode( $username.':'.$password )),
'body' => array(
'title' => $title,
'status' => 'draft',
'content' => $content,
'categories' => $category_id,
'tags' => $tag_id,
'slug' => $slug
)
));
$response = $response['body'];
}
WP REST API v2の読み込む
require_once( '../wp-load.php' );
WP REST API v2を使うにあたって、wp-load.phpを読み込む必要があります。
APIのURLを指定する
$url = 'https://example.com/wp-json/wp/v2/posts';
APIのURLを指定します。
記事の場合はwp-json/wp/v2/posts、また固定ページの場合はwp-json/wp/v2/pagesを指定します。
※固定ページは方法が見つからず適当にそれっぽいとこ変えて試してみたらできただけなので、これが正解かは不明です。
ユーザー名とパスワードを指定する
WordPressに設定しているメインパスワードを公開せずにユーザーを認証するためのアプリケーション用の一意のパスワードを作成する必要があります。
当方は「Application Passwords」というプラグインを使って設定しています。
投稿データを作成する
タイトル、本文、カテゴリやタグの設定を作成します。
wp_remote_post()のbodyに指定可能なパラメータは以下の通りです。
title | 記事や固定ページのタイトル | テキスト |
status | 投稿ステータス | publish、future、draft、private、trash、auto-draft、inherit |
content | 投稿本文 | テキスト |
categories | カテゴリー | カテゴリID、複数時は配列やカンマ区切りで。 |
tags | タグ | タグID、複数時は配列やカンマ区切りで。 |
slug | スラッグ名 | テキスト |
投稿ステータス
投稿ステータス(status)オプション文字列の説明です。
投稿時のステータス状態を指定できます。
publish | 公開済み |
future | 予約投稿 |
draft | 下書き |
private | 非公開 |
trash | ゴミ箱 |
auto-draft | 自動保存 |
inherit | 継承 |
wp_remote_post()の返り値
$response['body’]とする事で、投稿の可否や結果を返り値として受け取る事が可能です。
返り値はjson形式で受け取ります。
新たに投稿した記事や固定ページのページIDが必要な場合は返り値のjsonをデコードすると$response['id’]という配列キーのデータに記事IDは入っています。
$response = json_decode($response['body'], true);
$post_id = $response['id'];
wp_remote_post()の注意点
そのままだとスラッグ名が重複した場合も複数作成される
wp_remote_post()で記事やカテゴリを作成した場合、スラッグ名の重複時も新たにページは作成されます。
返り値のjsonデータはそのままだと文字化けするのでデコードが必要
返り値のjsonデータはそのまま表示すると文字化けするのでデコードが必要になります。
bodyにdescriptionも指定できるけどGutenbergだと上手くいかないかも
bodyにdescriptionも指定可能ですが、何度かチャレンジしましたがGutenbergだからか上手くいかなかったので諦めました。
投稿と同時にカテゴリやタグを作成する場合は別途wp_insert_category()等を
投稿と同時にカテゴリやタグを作成する場合は別途wp_insert_category()やwp_create_term()を利用して先にカテゴリまたはタグを作成してそれぞれのIDを取得しておきます。
ディスカッション
コメント一覧
まだ、コメントがありません