WP REST API v2のベーシック認証がうまくいかなかった(こちらも試した)のでとりあえずJWTのプラグインを使った。
JWT Authentication for WP REST APIの設定
.htaccess
# BEGIN WordPress
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
# END WordPress
wp-config.php
に以下を先頭に追加
※末尾だとJWT is not configurated properly, please contact the admin
wp-config.php
/** JWT Authentication for WP REST API */
define('JWT_AUTH_SECRET_KEY', 'your-top-secret-key');
define('JWT_AUTH_CORS_ENABLE', true);
※your-top-secret-key
は設定する
トークン取得
/wp-json/jwt-auth/v1/token
リクエストボディ
{
"username" : "admin",
"password" : "admin"
}
投稿
/wp-json/wp/v2/posts
リクエストヘッダ
Authorization: Bearer <トークン>
リクエストボディ
{
"title" : "WP REST API v2",
"status" : "publish",
"content" : "content",
"categories" : "1,2",
"tags" : "3,4"
"meta" : {
"custom_field_name" : "value"
}
}
meta
は今のところ設定しないと投稿時に登録できない様子
hookでpostsにmetaを追加する方法で対応する
カテゴリーとタグはドキュメントではarray
になっているけどstring
でした・・・
カテゴリIDの確認は/wp-json/wp/v2/categories
タグIDの確認は/wp-json/wp/v2/tags
今回は投稿なのでrest_insert_post
にした以下の設定を追記
wp-content\themes\XXXXXX\functions.php
add_action('rest_insert_post', function (\WP_Post $post, $request, $creating)
{
$metas = $request->get_param('meta');
if (is_array($metas))
{
foreach ($metas as $name => $value)
{
update_post_meta($post->ID, $name, $value);
}
}
}, 10, 3);