質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

Q&A

解決済

1回答

4213閲覧

Wordpressの WP REST API v2 でカスタムフィールドに投稿するには

ebsffzal

総合スコア107

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

0グッド

2クリップ

投稿2018/03/16 11:56

有識者の皆様
お世話になっています。

現在、下記のようなことができるのか、調べていますが、どうにも進みませんので
お知恵をお借りいただきたいと思います。

やりたいことは、wordpressのwp rest api(v2)を使った記事投稿なのですが、
その際にカスタムフィールドの値も同時に投稿したいです。

調査中ですが、概要を下記にまとめました。

■環境
サーバA (さくらVPS)
サーバB(不明)

■ミドルウェア
サーバA、サーバB、ともに一般的なLAMP環境で、ブラウザからは問題なくwordpressが使えている状況

■試したこと
wordpressのWP REST API v2を使えば、サーバAのphpプログラムから、
サーバBのwordpressへ記事投稿ができる件を調べ、通常の記事投稿はできるようになりました(その際に必要なプラグインはここでは省略)

■調べたこと
・通常の記事投稿の際に、カスタムフィールドの値を投稿できないかどうか
・カスタムフィールドの値を呼び出す方法は、web上にちらほら発見しました
・プラグインをインストール(Advanced Custom Fields と ACF to REST API)しました

■現状のソースコード
・通常の記事投稿部分のみ抜粋
・記事投稿は成功し、サーバBのwordpressで記事が見えます

php

1$data = [ 2 "title" => "ここに記事タイトル", 3 "content" => "ここに内容", 4 "slug" => "スラッグ", 5 "categories" => "カテゴリ", 6 "status" => "publish" 7]; 8 9$header = [ 10 'Authorization: Basic ' . base64_encode('投稿用ユーザID' . ':' . '投稿専用パスワード'), 11 'Content-Type: application/json', 12]; 13 14$curl = curl_init(); 15 16curl_setopt($curl, CURLOPT_URL, サーバBURL . '/?rest_route=/wp/v2/posts'); 17curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST'); 18curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data)); 19curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 20curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 21curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 22curl_setopt($curl, CURLOPT_HEADER, true); 23 24$response = curl_exec($curl); 25 26$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE); 27$header = substr($response, 0, $header_size); 28$body = substr($response, $header_size); 29$result = json_decode($body, true); 30curl_close($curl);

■実現したいこと
上記のような環境とソースコードに対し、カスタムフィールドの値を増設し、
サーバBへの投稿の際に、カスタムフィールドも投稿したいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

WordPress REST APIのドキュメント や ACF to REST API のドキュメントを読んだ感じでは、REST API の標準状態は、カスタムフィールドの取得・変更等はできないようですので、1回のポストで、投稿とカスタムフィールドをまとめて、取得したり投稿したりはできないようです。

新規投稿時にカスタムフィールドを設定する手順としては、以下のような感じになると思います。

  1. WP REST API v2 のエンドポイント /wp/v2/posts に タイトル・本文等を新規投稿する。
  2. 新規投稿した post_id を取得する。
  3. ACF to REST API で追加されるエンドポイント /acf/v3/posts/{id} に対して カスタムフィールドの値を投稿する。(エンドポイントの{id}部分は、post_idに置き換える。)
  4. 投稿した記事を公開する。

カスタムフィールドがない状態で公開されても問題ない場合は、1で公開にしておけば手順が1回分少なくなります。

投稿2018/03/17 06:02

編集2018/03/17 06:08
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ebsffzal

2019/02/19 03:01

上記ヒントをもとに解決できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問