[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 | jqCode language: Bash (bash)

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

$ curl http://localhost/?rest_route=wp/v2/posts | jqCode language: Bash (bash)

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

$ curl http://localhost/wp-json/wp/v2/posts/1 | jqCode language: Bash (bash)

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

$ curl http://localhost/wp-json/wp/v2/pages | jqCode language: Bash (bash)

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

$ curl http://localhost/wp-json/wp/v2/pages/55 | jqCode language: Bash (bash)

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

$ curl http://localhost/wp-json/wp/v2/categories | jqCode language: Bash (bash)

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

$ curl http://localhost/wp-json/wp/v2/categories/3 | jqCode language: Bash (bash)

タグ一覧を取得します。

$ curl http://localhost/wp-json/wp/v2/tags | jqCode language: Bash (bash)

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

$ curl http://localhost/wp-json/wp/v2/tags/5 | jqCode language: Bash (bash)

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"}'Code language: Bash (bash)

実行結果は、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",
Code language: plaintext (plaintext)

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"}'Code language: Bash (bash)

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/$idCode language: Bash (bash)

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

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

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

{
  "categories": [3, 4],
  "tags": [11, 12]
}Code language: plaintext (plaintext)

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

curl $host/wp-json/wp/v2/tags?search=haskellCode language: Bash (bash)

見つかれば、そのタグ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"}'Code language: Bash (bash)

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