自動化ツールでブログを作成⑩:ZapierからACFフィールドへの投稿

調べたこと

半自動イベントポータルブログ「コレイコーひろしま」ができるまで。カスタムフィールドに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
ChatGPT
  • WebhookのAction Eventを「Custom Request」にする
  • MethodをPOSTにして、Data欄に以下のコードを書く

前段階で投稿した記事のIDを取得してPOSTのURLに加えることで、投稿した記事のACFフィールドに追加されるようにした。そしてData欄には指示されたとおりのコードを書いて、入力したいデータを引っ張ってきた。これで無事に当該記事のACFフィールドに投稿できた。これでやりたかった自動化ができたので、あとはイベントを見つけては粛々と登録していこう。

<自動化ツールでブログを作成シリーズ>

  1. 自動化ツールを使うためにはサーバー設定の見直しが必要
  2. 没になったアイデアたち
  3. ChatGPTがプラグインの提案とPHPコードを書いてくれた
  4. 全くわからないPythonコードを書いてもらう
  5. jsonを使ってZapierからブログ投稿
  6. Cocoonのphp構造を理解してカスタムテンプレートをつくる
  7. Googleフォームに入力したらWordPressに自動投稿してくれるZapierフローのまとめ
  8. ZapierでSNSへ定期的に自動投稿
  9. 週末に土日から来週のイベントをまとめてSNSに投稿するZapierフローのまとめ
  10. ZapierからACFフィールドへの投稿
  11. ChatGPTと一緒にブログを作って感じたこと

コメント

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