サポート » 使い方全般 » csvでインポートした投稿のカスタムフィールド値がWP REST APIで吐き出せな

  • カスタム投稿 SHOP のタイトルとカスタムフィールド値をAPIで外部サイトから利用しようとしているのですが、CSVでインポートした投稿だけ、カスタムフィールドの値がjsonに含まれません。

    以下、何をしたかを順に列挙します。

    投稿タイプshopのregister_post_typeに以下を追加
    'show_in_rest' => true

    WP REST APIプラグインを有効にし、カスタムフィールドをjon apiで吐き出せるように以下をfunctions.phpに追加しました

    //カスタムフィルドをREST APIに追加
    function wp_rest_api_alter() {
        $params = array(
            'get_callback'    => function($data, $field, $request, $type){
                if (function_exists('get_fields')) {
                    return get_fields($data['id']);
                }
                return [];
                },
            'update_callback' => null,
            'schema'          => null,
        );
    
        register_api_field( 'shop', 'fields', $params );
    }
    add_action( 'rest_api_init', 'wp_rest_api_alter');

    これで、テスト投稿(管理画面から手動投稿)については
    http://example.com/wp-json/wp/v2/shopにアクセスすれば
    問題なくデータを取り出せたため、Really Simple CSV importerを使ってデータを流しこんだのですが、そうするとCSVで流し込んだ投稿だけfieldの値が空になってしまっています。

    その投稿をもう一度手動で保存しなおせば、jsonにもカスタムフィールドのデータが反映されますが、数百記事を手動で対応するのは現実的に難しいため、どなたか解決方法をご教授いただけないでしょうか?

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • モデレーター Daisuke Takahashi

    (@extendwings)

    管理画面で見えていて、REST APIでは見えないということは、キャッシュ関連の可能性が高いと思います。
    何かキャッシュ系のプラグインを使っていれば、すべて無効にしてみてください。

    > Daisuke Takahashiさん

    ご返信有り難うございます。
    プラグインを確認しましたが、キャッシュ関連のプラグインは使用していません。

    他にどういう原因が考えられますでしょうか。GW中に大変お手数おかけしますが、引き続きよろしくお願いいたします。

    モデレーター jim912

    (@jim912)

    get_fieldsを利用しているということは、Advanced Custom Fields を利用しているものと思います。Advanced Custom Fields は、カスタムフィールドに入力した値だけでなく、meta_key がアンダースコアで始まるレコードと合わせてデータベースに格納されます。

    CSVで、Advanced Custom Fields のデータを流しこむ場合、この値だけでなく、アンダースコアで始まるデータも合わせてインポートする必要があります。

    jim912さん
    なるほど。そうだったんですね。

    アンダースコアで始まるデータがどういうものなのかがよくわかっていないのですが、get_fieldsを使わなければ問題なく動くということでしょうか?

    もしその場合、差し支えなければその書き方を教えていただけますでしょうか?

    大変お手数おかけしておりますが、ご教授いただけると助かります。

    モデレーター jim912

    (@jim912)

    json に出力したいカスタムフィールドのmeta_key を配列で定義しておき、ループ処理で get_post_meta を使うか、get_post_custom で全カスタムフィールドを取得し、array_intersect_key で必要なデータをフィルタリングするかのどちらかになります。

    > jim 912さん
    ありがとうございます!

    とりいそぎget_post_customで対応することにしました。
    array_intersect_keyはよくわからなかったので、セキュリティ的に危険なのかもしれませんが全フィールドを吐き出すようにしました。

    また勉強して対応したいと思います。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「csvでインポートした投稿のカスタムフィールド値がWP REST APIで吐き出せな」には新たに返信することはできません。