web-dev-qa-db-ja.com

取得したJSONにカスタム投稿メタ値を含める

私はカスタム投稿タイプnoteを持っていて、WP REST AP​​Iを使って投稿を簡単に取得できます。

http://example.com/wp-json/wp/v2/note

正常に動作します!しかしJSON文字列の中に、hello_worldという名前のカスタム投稿メタの値を含めるようにしたいと思います。例えば:

"hello_world": "value...",

JSONにこのカスタム投稿メタを含めるにはどうすればよいですか。

4
Toby

2つの点に注意してください。1)register_meta() 2)カスタムフィールドは投稿タイプをサポートします。

1)register_meta

カスタム投稿メタをshow_in_rest => trueに登録してapiからアクセスできるようにすることができます。このページの下: 回答の修正 、次の例を示します。

<?php
// The object type. For custom post types, this is 'post';
// for custom comment types, this is 'comment'. For user meta,
// this is 'user'.
$object_type = 'post';
$args1 = array( // Validate and sanitize the meta value.
    // Note: currently (4.7) one of 'string', 'boolean', 'integer',
    // 'number' must be used as 'type'. The default is 'string'.
    'type'         => 'string',
    // Shown in the schema for the meta key.
    'description'  => 'A meta key associated with a string meta value.',
    // Return a single value of the type.
    'single'       => true,
    // Show in the WP REST API response. Default: false.
    'show_in_rest' => true,
);
register_meta( $object_type, 'my_meta_key', $args1 );

2)カスタムフィールドのサポート

上記のページでは、あなたのCPTが custom-fields supportに表示されるようにする必要があると述べています。

投稿タイプを登録するときに、$ args配列のsupports配列'supports' => array('title','editor','thumbnail','custom-fields')custom-fieldsを追加します。


CPT登録のコンテキスト内で、これを$ args配列の最後の行の最後の項目として追加しました。

add_action( 'init', 'codex_book_init' );
/**
 * Register a book post type.
 *
 * @link http://codex.wordpress.org/Function_Reference/register_post_type
 */
function codex_book_init() {
    $labels = array(
        'name'               => _x( 'Books', 'post type general name', 'your-plugin-textdomain' ),
        'singular_name'      => _x( 'Book', 'post type singular name', 'your-plugin-textdomain' ),
        'menu_name'          => _x( 'Books', 'admin menu', 'your-plugin-textdomain' ),
        'name_admin_bar'     => _x( 'Book', 'add new on admin bar', 'your-plugin-textdomain' ),
        'add_new'            => _x( 'Add New', 'book', 'your-plugin-textdomain' ),
        'add_new_item'       => __( 'Add New Book', 'your-plugin-textdomain' ),
        'new_item'           => __( 'New Book', 'your-plugin-textdomain' ),
        'edit_item'          => __( 'Edit Book', 'your-plugin-textdomain' ),
        'view_item'          => __( 'View Book', 'your-plugin-textdomain' ),
        'all_items'          => __( 'All Books', 'your-plugin-textdomain' ),
        'search_items'       => __( 'Search Books', 'your-plugin-textdomain' ),
        'parent_item_colon'  => __( 'Parent Books:', 'your-plugin-textdomain' ),
        'not_found'          => __( 'No books found.', 'your-plugin-textdomain' ),
        'not_found_in_trash' => __( 'No books found in Trash.', 'your-plugin-textdomain' )
    );

    $args = array(
        'labels'             => $labels,
        'description'        => __( 'Description.', 'your-plugin-textdomain' ),
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'book' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => null,
        'supports'           => array( 
                                     'title', 
                                     'editor', 
                                     'author', 
                                     'thumbnail', 
                                     'excerpt', 
                                     'comments',
                                     'custom-fields' 
                                     )
        );

    register_post_type( 'book', $args );
}
2
hwl