CoreserverにインストールしたWordpressにWordpress Rest APIを使用して投稿することは可能です。
WordPress Rest API にプログラムから投稿すると「このユーザーとして投稿を編集する権限がありません。」
CorserverのCGIインストールを使用してインストールしたWordpressに、
WordPress Rest API に投稿すると、
「このユーザーとして投稿を編集する権限がありません。」
とエラーが出て困っていました。
検索すると、FastCGI版ではAuthrizationヘッダーを読んでくれず、モジュール版PHPを使用する必要があるという記事が出てきました。
coreserverのPHPはFastCGI版なので絶望しかけたのですが、.htaccessを編集することで解決できました。
.htaccessを編集する
早速、解決方法ですが、.htaccessを開いて次のように編集してください。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.)
RewriteRule . - [e=HTTP_AUTHORIZATION:%1]
</IfModule>
# BEGIN WordPress
# "BEGIN WordPress" から "END WordPress" までのディレクティブ (行) は
# 動的に生成され、WordPress フィルターによってのみ修正が可能です。
# これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
1-6行目を追加しています。
ポイントは「#BEGIN WordPress」の外側に追加することだと思っています。
内側に追加したのは、「これらのマーカー間にあるディレクティブへのいかなる変更も上書きされてしまいます。」とあるように、
上書きされて無効化されてしまうのだと思います。
Authorizationヘッダーに設定する値は何?
Authorizationヘッダーに設定する値は、ワードプレスにログインするときにユーザー名とパスワードを元に生成したトークンです。
Application Passwordを使用すると書いてるサイトもあるのですが、誤りだと考えています。
Authrozation: "Basic トークン"
という形式になります。
トークンの部分は、「ユーザー名:パスワード」をbase64エンコードした値になります。
https://www.en-pc.jp/tech/base64.php このようなサイトでエンコードできます。
手動でエンコードしても良いのですが、不安な人はWordPress REST API Authenticationというプラグインを使って出てくるトークンを取得すれば確実です。
WordPress REST APIで投稿するプログラムを作っていると、他にも様々な401エラーに泣かされると思います。
https://developers.miniorange.com/docs/rest-api-authentication/wordpress/basic-authentication
こちらのサイトにエラーの意味が記載されているため、参考になりました。