[WordPress] REST APIで外部システムから投稿するには(2/2)

WordPress REST API

WP REST API v2 Documentation
Documentation for version 2.0 of the WP REST API.

curlで投稿データを取得する

投稿一覧を取得します。jqコマンでJSONを整形表示します。

$ curl http://localhost/wp-json/wp/v2/posts | jq

なお、WordPressのパーマリンク設定が、基本(http://localhost:8000/?p=123)の場合は、rest_routeパラメータで指定します。

$ curl http://localhost/?rest_route=wp/v2/posts | jq

投稿IDを指定して、投稿データを取得します。

$ curl http://localhost/wp-json/wp/v2/posts/1 | jq

ページ一覧を取得します。

$ curl http://localhost/wp-json/wp/v2/pages | jq

ページIDを指定して、ページデータを取得します。

$ curl http://localhost/wp-json/wp/v2/pages/55 | jq

カテゴリー一覧を取得します。

$ curl http://localhost/wp-json/wp/v2/categories | jq

カテゴリーIDを指定して、カテゴリーデータを取得します。

$ curl http://localhost/wp-json/wp/v2/categories/3 | jq

タグ一覧を取得します。

$ curl http://localhost/wp-json/wp/v2/tags | jq

タグIDを指定して、タグデータを取得します。

$ curl http://localhost/wp-json/wp/v2/tags/5 | jq

WordPessをインストール直後は、ID=1の投稿があるので、

curlで投稿を新規投稿する

次のシェルスクリプトのapp_userは、WordPressのユーザ名です。

Application Passwordsで作成するときに、名前に「#1」などを入力しますが、これではありません。

#!/bin/bash host=http://localhost:8000 app_user="<WordPressのユーザー名>" # #1 app_pass="<Application Passwordsで作成したパスワード>" curl --user "${app_user}:${app_pass}" \ -X POST \ $host/wp-json/wp/v2/posts \ -H "Content-Type: application/json" \ -d '{"title": "MyTitle", "contents": "MyBody", "status": "publish"}'

実行結果は、ID=63が返ってきました。

{ "id": 63, "date": "2020-08-23T11:22:31", "date_gmt": "2020-08-23T02:22:31", "guid": { "rendered": "http://localhost:8000/2020/08/mytitle-3/", "raw": "http://localhost:8000/2020/08/mytitle-3/" }, "modified": "2020-08-23T11:22:31", "modified_gmt": "2020-08-23T02:22:31", "password": "", "slug": "mytitle-3", "status": "publish", "type": "post", "link": "http://localhost:8000/2020/08/mytitle-3/", "title": { "raw": "MyTitle", "rendered": "MyTitle" }, "content": { "raw": "MyBody", "rendered": "<p>MyBody</p>\n", "protected": false, "block_version": 0 }, "excerpt": { "raw": "", "rendered": "<p>MyBody</p>\n", "protected": false }, "author": 2, "featured_media": 0, "comment_status": "open", "ping_status": "open", "sticky": false, "template": "", "format": "standard", "meta": [], "categories": [ 1 ], "tags": [], "permalink_template": "http://localhost:8000/2020/08/%postname%/", "generated_slug": "mytitle-3",

curlで投稿を編集する

タイトルを「MyTitle」から「MyTitle#3」へ、本文を「MyBody」から「MyBody#3」へ変更します。

#!/bin/bash host=http://localhost:8000 app_user="<WordPressのユーザー名>" # #1 app_pass="<Application Passwordsで作成したパスワード>" id=63 curl --user "${app_user}:${app_pass}" \ -X POST \ $host/wp-json/wp/v2/posts/$id \ -H "Content-Type: application/json" \ -d '{"title": "MyTitle#3", "content": "MyBody#3"}'

curlで投稿を削除する

ゴミ箱に移動します。

#!/bin/bash host=http://localhost:8000 app_user="<WordPressのユーザー名>" # #1 app_pass="<Application Passwordsで作成したパスワード>" id=63 curl --user "${app_user}:${app_pass}" -X DELETE $host/wp-json/wp/v2/posts/$id

投稿にカテゴリーやタグを指定するには

投稿記事にカテゴリーやタグを指定するには、少々めんどうです。

"プログラミング" や "haskell" などの文字列のままでは、投稿記事に指定できないんですね。"プログラミング"のカテゴリーIDや、"haskell"のタグIDを取得して、IDを指定しなければなりません。

{ "categories": [3, 4], "tags": [11, 12] }

例えば、記事に"haskell" というタグがついている場合、WP REST APIで、タグを"haskell"で検索します。

curl $host/wp-json/wp/v2/tags?search=haskell

見つかれば、そのタグIDをさきほどの "tags" に指定します。

なければ、WP REST API で、"haskell"をタグに新規追加します。レスポンスから、タグIDを調べて、そのタグIDを投稿記事の"tags"に指定します。

#!/bin/bash host=http://localhost:8000 app_user="<WordPressのユーザー名>" # #1 app_pass="<Application Passwordsで作成したパスワード>" curl --user "${app_user}:${app_pass}" \ -X POST \ $host/wp-json/wp/v2/tags \ -H "Content-Type: application/json" \ -d '{"name": "haskell"}'

タイトルとURLをコピーしました