web-dev-qa-db-ja.com

を使用してカスタム投稿メタを取得する方法 REST API

私は私のワードプレスウェブサイトのためのREST AP​​Iを作成しようとしています。

私のカスタム投稿、分類法を\ plugins\rest-api\plugin.phpに登録しました。

下記のAPIは私にデフォルトの応答ですべてのリストを与えます。

http:// localhost/sports/wp-json/wp/v2/joblisting/

以下のコードを使用してJSONレスポンスにpost metaを追加したいと思いました。

function slug_register_phone_number() {
            register_rest_field( 'job_listing',
                'phone',
            array(
                'get_callback' => 'slug_get_phone_number',
                'update_callback' => null,
                'schema' => null,
            )
        );
    }

    function slug_get_phone_number($post, $field_name, $request) {
        return get_post_meta($post->id, '_phone' );
    }
}

上記のコードを使用して私はREST応答として "phone"を追加することができますが、私はいつも応答としてphone = falseを得ています。 wp_postmetaテーブルの正しいデータが表示されていません。

私は参考のために下記のリンクをたどりました。

http://v2.wp-api.org/extending/modifying/

詳細を差し込みます。 1. WPジョブマネージャ2. rest-api

どんな助けでも本当に役に立ちます。

9
Hari Soni

コールバック関数の$post は配列であり、オブジェクトではありません。だからあなたは$post->idを使うことはできません。それを$post['id']に変更すればうまくいくはずです。

function slug_get_phone_number($post, $field_name, $request)
{
    return get_post_meta($post['id'], '_phone', true);
}

私は_phonephone_numberまたはアンダースコアを前に付けない何かに変更することをお勧めします。なぜなら_はプライベートメタキーと一緒に使われることが多いからです。あなたの投稿に直接_接頭辞を持つメタキーを持つカスタムフィールドを追加しようとすると、あなたは私が何を意味しているのか分かるでしょう。

5
MinhTri

WP APIにはrest_prepare_postフィルター(カスタム投稿を扱う場合はrest_prepare_CPT)があり、これを使用してJSONレスポンスを変更できます。あなたの場合はrest_prepare_joblistingになります。

function filter_joblisting_json( $data, $post, $context ) {
$phone = get_post_meta( $post->ID, '_phone', true );

if( $phone ) {
    $data->data['phone'] = $phone;
}

return $data;
}
add_filter( 'rest_prepare_joblisting', 'filter_joblisting_json', 10, 3 );

同じフィルタを使用して、レスポンスからフィールド/データを削除し、データを操作することもできます。 ここ あなたは役に立つかもしれないそしてそれがどのように働くかについて知ることができるかもしれないフィルタを使うことのいくつかの例を見つけることができる。

16
Boris Kuzmanov

このメソッドをfunction.phpに追加するだけです

add_action( 'rest_api_init', 'create_api_posts_meta_field' );

function create_api_posts_meta_field() {

 // register_rest_field ( 'name-of-post-type', 'name-of-field-to-return', array-of-callbacks-and-schema() )
 register_rest_field( 'tour', 'metaval', array(
 'get_callback' => 'get_post_meta_for_api',
 'schema' => null,
 )
 );
}

function get_post_meta_for_api( $object ) {
 //get the id of the post object array
 $post_id = $object['id'];

 //return the post meta
 return get_post_meta( $post_id );
}
1
Nuwan