8

如何使用 WP REST API(v1 或 v2)从特定的自定义帖子类型中获取所有帖子?我对此很陌生,并试图了解如何做到这一点。

我目前正在使用 WP REST API v2 并设法获取所有帖子类型的列表

http://domain.com/wp-json/wp/v2/types

然后设法获得我感兴趣的帖子类型

http://domain.com/wp-json/wp/v2/types/the-icons-update

如何从该特定内容类型中获取所有帖子?

我试过了

http://domain.com/wp-json/wp/v2/posts?filter[post_type]=the-icons-update

但它返回一个空数组(我想它返回默认帖子,在我的网站上只有我试图检索的自定义帖子类型内的帖子)。

我如何注册帖子类型可能有问题吗?

function custom_post_type() {
$labels = array(
    'name'               => _x( 'The Icons Update', 'post type general name' ),
    'singular_name'      => _x( 'The Icons Update', 'post type singular name' ),
    'add_new'            => _x( 'Add Page', 'magazine' ),
    'add_new_item'       => __( 'Add New Page' ),
    'edit_item'          => __( 'Edit Page' ),
    'new_item'           => __( 'New Page' ),
    'all_items'          => __( 'All Pages' ),
    'view_item'          => __( 'View Page' ),
    'search_items'       => __( 'Search Pages' ),
    'not_found'          => __( 'No Page found' ),
    'not_found_in_trash' => __( 'No Page found in the Trash' ), 
    'parent_item_colon'  => '',
    'menu_icon'          => '',
    'menu_name'          => 'The Icons Update'
);
$args = array(
    'labels'        => $labels,
    'description'   => 'Holds our projects and project specific data',
    'public'        => true,
    'menu_position' => 5,
    'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ),
    'has_archive'   => true,
    'taxonomies'    => array('post_tag', 'category'),
    'hierarchical'  => false,
    'query_var'     => true,
    'queryable' => true,
        'searchable'    => true,
    'rewrite'       => array( 'slug' => 'the-icons-update' )
);
register_post_type( 'magazine', $args );
flush_rewrite_rules();
}
add_action( 'init', 'custom_post_type' );

对此的任何帮助都非常感谢。

4

4 回答 4

5

v.2 有一个非常简单的方法。您所要做的就是在您的args数组中包含以下属性:'show_in_rest' => true

例子:

register_post_type( 'recipe',
     array(
          'labels' => $labels,
          'public' => true,
          'menu_position' => 5,
          'hierarchical' => false,
          'supports' => $supports,
          'show_in_rest' => true,
          'taxonomies' => array('recipe-type', 'post_tag'),
          'rewrite' => array( 'slug' => __('recipe', 'recipe') )
     )
);
于 2016-07-05T21:56:46.703 回答
3

要使用 REST API 插件的 v2:

在主题的functions.php文件中,添加以下内容以创建一个 rest 端点:

add_action( 'init', 'add_myCustomPostType_endpoint');
function add_myCustomPostType_endpoint(){

    global $wp_post_types;
    $wp_post_types['myCustomPostType']->show_in_rest = true;
    $wp_post_types['myCustomPostType']->rest_base = 'myCustomPostType';
    $wp_post_types['myCustomPostType']->rest_controller_class = 'WP_REST_Posts_Controller';
}

现在您应该可以从以下端点进行查询:

/wp-json/wp/v2/myCustomPostType

myCustomPostType是您注册的自定义帖子类型。“rest_base”不必与您的自定义帖子类型的名称相匹配。

您很可能希望添加特定于您的自定义帖子类型的其他字段,例如帖子元数据或可能来自高级自定义字段插件。对于这些场景,您可以通过在functions.php文件中添加这样的代码段来包含这些属性:

function add_myCustomPostType_fields_url_to_myCustomPostType_request( $data, $post, $request ) {
    $_data = $data->data;

    $customImageProperty = get_field('customImageProperty'); 

    $_data['customImageProperty'] = $customImageProperty['url'];

    $data->data = $_data;
    return $data;
}
add_filter( 'rest_prepare_myCustomPostType', 'add_myCustomPostType_fields_url_to_myCustomPostType_request', 10, 3 );
于 2016-01-25T15:30:01.713 回答
2

register_post_type('帖子类型的名称'...) 而不是 'add_new' 名称。将您的帖子类型的名称更改为杂志并检查结果。希望能帮助到你。

于 2015-09-05T22:27:44.790 回答
2

通过恢复到 REST API 插件的 v1,/wp-json/posts?type=name-of-post-type我设法从该特定帖子类型中检索帖子。

于 2015-09-07T07:16:39.550 回答