WordPress REST API
curlで投稿データを取得する
投稿一覧を取得します。jqコマンでJSONを整形表示します。
$ curl http://localhost/wp-json/wp/v2/posts | jq
Code language: Bash (bash)
なお、WordPressのパーマリンク設定が、基本(http://localhost:8000/?p=123
)の場合は、rest_routeパラメータで指定します。
$ curl http://localhost/?rest_route=wp/v2/posts | jq
Code language: Bash (bash)
投稿IDを指定して、投稿データを取得します。
$ curl http://localhost/wp-json/wp/v2/posts/1 | jq
Code language: Bash (bash)
ページ一覧を取得します。
$ curl http://localhost/wp-json/wp/v2/pages | jq
Code language: Bash (bash)
ページIDを指定して、ページデータを取得します。
$ curl http://localhost/wp-json/wp/v2/pages/55 | jq
Code language: Bash (bash)
カテゴリー一覧を取得します。
$ curl http://localhost/wp-json/wp/v2/categories | jq
Code language: Bash (bash)
カテゴリーIDを指定して、カテゴリーデータを取得します。
$ curl http://localhost/wp-json/wp/v2/categories/3 | jq
Code language: Bash (bash)
タグ一覧を取得します。
$ curl http://localhost/wp-json/wp/v2/tags | jq
Code language: Bash (bash)
タグIDを指定して、タグデータを取得します。
$ curl http://localhost/wp-json/wp/v2/tags/5 | jq
Code 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/$id
Code 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=haskell
Code 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)