WordPress REST API
curlで投稿データを取得する
投稿一覧を取得します。jqコマンでJSONを整形表示します。
Code language: Bash (bash)$ curl http://localhost/wp-json/wp/v2/posts | jq
なお、WordPressのパーマリンク設定が、基本(http://localhost:8000/?p=123
)の場合は、rest_routeパラメータで指定します。
Code language: Bash (bash)$ curl http://localhost/?rest_route=wp/v2/posts | jq
投稿IDを指定して、投稿データを取得します。
Code language: Bash (bash)$ curl http://localhost/wp-json/wp/v2/posts/1 | jq
ページ一覧を取得します。
Code language: Bash (bash)$ curl http://localhost/wp-json/wp/v2/pages | jq
ページIDを指定して、ページデータを取得します。
Code language: Bash (bash)$ curl http://localhost/wp-json/wp/v2/pages/55 | jq
カテゴリー一覧を取得します。
Code language: Bash (bash)$ curl http://localhost/wp-json/wp/v2/categories | jq
カテゴリーIDを指定して、カテゴリーデータを取得します。
Code language: Bash (bash)$ curl http://localhost/wp-json/wp/v2/categories/3 | jq
タグ一覧を取得します。
Code language: Bash (bash)$ curl http://localhost/wp-json/wp/v2/tags | jq
タグIDを指定して、タグデータを取得します。
Code language: Bash (bash)$ 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"}'
Code language: Bash (bash)
実行結果は、ID=63が返ってきました。
Code language: plaintext (plaintext){ "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"}'
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を指定しなければなりません。
Code language: plaintext (plaintext){ "categories": [3, 4], "tags": [11, 12] }
例えば、記事に"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)