WP REST API 从帖子类型中获取帖子
Posted
技术标签:
【中文标题】WP REST API 从帖子类型中获取帖子【英文标题】:WP REST API fetch posts from post type 【发布时间】:2015-11-30 08:54:00 【问题描述】:如何使用 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' );
非常感谢任何帮助。
【问题讨论】:
【参考方案1】:register_post_type('name of post type'...) 而不是 'add_new' 名称。 将您的帖子类型的名称更改为杂志并检查结果。希望对您有所帮助。
【讨论】:
谢谢,我做了这个改变,但不幸的是它并没有解决我的问题。我恢复到 REST API 插件的 v1 并使用 domain.com/wp-json/posts?type=magazine 我设法从该特定帖子类型中检索帖子。谢谢【参考方案2】:通过恢复到 REST API 插件的 v1 并使用 /wp-json/posts?type=name-of-post-type
,我设法从该特定帖子类型中检索帖子。
【讨论】:
【参考方案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”不必与您的自定义帖子类型的名称匹配。
您很可能希望添加特定于您的自定义帖子类型的其他字段,例如帖子元数据或可能来自Advanced Custom Fields 插件。对于这些情况,您可以通过在 functions.php 文件中添加这样的 sn-p 来包含这些属性:
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 );
【讨论】:
【参考方案4】: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') )
)
);
【讨论】:
在哪里添加?谢谢。 @Si8 在您的functions.php
文件中;)
我只想包含帖子的 ID,仅此而已。上面的方法有用吗?如果有必要,我可以提出一个新问题。谢谢
我从未尝试过使用帖子的 ID,但我认为它应该可以工作 :)以上是关于WP REST API 从帖子类型中获取帖子的主要内容,如果未能解决你的问题,请参考以下文章