半自動イベントポータルブログ「コレイコーひろしま」ができるまで。カスタムフィールドにZapierでデータ入力ができるようになった話。
カスタムフィールドにZapierでデータの投稿ができない
この回でChatGPTが提案してくれたカスタムフィールドにも自動でデータを投稿することで、Googleフォームに入力したら、ほぼ何もせずに記事を投稿できるのだが、これがなかなかうまくいかなかった。Chat GPTに質問して、準備段階でやったことはこれ。
- Advanced Custom Fields(ACF)プラグインはACF PROにアップグレードしないとREST APIに接続できない。これを回避するためにACF to REST APIというプラグインを新たに導入する必要がある。
- 更にFunctions.phpにコードを追加することでREST APIでACFのカスタムフィールドへの情報をやりとりできるようになる。
ということで、functions.phpに追加したコードがこれ。
// REST APIの初期化
add_action('rest_api_init', function () {
// GETリクエスト: ACFフィールドをレスポンスに追加
add_filter('rest_prepare_post', 'add_acf_fields_to_rest_api', 10, 3);
// POSTおよびPUTリクエスト: ACFフィールドを保存
register_rest_field('post', 'acf', array(
'update_callback' => 'save_acf_fields_from_rest_api',
'permission_callback' => function() {
return current_user_can('edit_posts'); // 権限チェック
},
'schema' => null,
));
});
// ACFフィールドをPOSTリクエストで保存する関数
function save_acf_fields_from_rest_api($value, $post, $field_name) {
// $postはWP_Postオブジェクトなので、IDを取得して使用
$post_id = $post->ID;
// POSTリクエストのデータからACFフィールドを抽出
if (isset($value)) {
$acf_fields = $value;
// 各ACFフィールドを更新
foreach ($acf_fields as $field_name => $field_value) {
update_field($field_name, $field_value, $post_id);
}
}
}
// REST APIのレスポンスにACFフィールドを追加する関数
function add_acf_fields_to_rest_api($response, $post, $request) {
// ACFフィールドを取得
$acf_fields = get_fields($post->ID);
// もしACFフィールドがあれば、REST APIのレスポンスに追加
if ($acf_fields) {
$response->data['acf'] = $acf_fields;
}
return $response;
}
同様のことはこのブログ記事にも書いてあった。
【Wordpress】REST API v2による投稿メタ/カスタムフィールド(postmeta)更新|鈴木麗子
REST APIとは Wordpressが4.7から標準機能として提供しているREST API 。 何ができるのかというと、https通信によるAPIアクセスで、記事を取得したり、記事を更新したりすることができます。 ※ 記事の更新には、W...
ところがこれではうまくいかない。ACFの内容をGETできているがPOSTできていない。ということは、きちんとACFを認識できているので、投稿の仕方に問題があるはずだ。
raw json形式でZapierにPOSTすればACFへの入力が可能になる
解決の糸口となったのはこのフォーラム。ChatGPTではラチがあかなかったので「Zapier ACF REST API」で検索したらすぐ見つかった。
Post to ACF fields using Zapier Wordpress API | Zapier Community
I am using the Zapier API to wordpress in my Zap and I want to updated customer fields. I have swicted on ACF on the API...
つまり、Zapierのボックス形式での入力方法ではなく、raw json形式でPOSTしたい内容を書けば送れるということらしい。一体どうすればraw json形式で書けるの?とChatGPTに聞いた。
ChatGPT
- WebhookのAction Eventを「Custom Request」にする
- MethodをPOSTにして、Data欄に以下のコードを書く
前段階で投稿した記事のIDを取得してPOSTのURLに加えることで、投稿した記事のACFフィールドに追加されるようにした。そしてData欄には指示されたとおりのコードを書いて、入力したいデータを引っ張ってきた。これで無事に当該記事のACFフィールドに投稿できた。これでやりたかった自動化ができたので、あとはイベントを見つけては粛々と登録していこう。
<自動化ツールでブログを作成シリーズ>
- 自動化ツールを使うためにはサーバー設定の見直しが必要
- 没になったアイデアたち
- ChatGPTがプラグインの提案とPHPコードを書いてくれた
- 全くわからないPythonコードを書いてもらう
- jsonを使ってZapierからブログ投稿
- Cocoonのphp構造を理解してカスタムテンプレートをつくる
- Googleフォームに入力したらWordPressに自動投稿してくれるZapierフローのまとめ
- ZapierでSNSへ定期的に自動投稿
- 週末に土日から来週のイベントをまとめてSNSに投稿するZapierフローのまとめ
- ZapierからACFフィールドへの投稿
- ChatGPTと一緒にブログを作って感じたこと
コメント