󰅡收起

艾码汇

互联网营销设计、运营推广进阶笔记

Vultr VPS
04
十二月

WordPress Rest API 支持自定义文章类型

作者: 艾慧
分类: 设计主题
共 4317字
发布时间: 2017-12-04 10:28

WordPress Rest API 支持自定义文章类型

Rest API 默认获取的数据支持文章类型和分类数据,如果创建了自定义文章类型或是分类,不能使用默认的方式进行获取,那么应该如何实现 Rest API 支持自定义文章类型和分类呢?

注册支持 Rest API 的自定义文章类型

当需要注册自定义文章类型的时候,如果想要使用 Rest API 的方式进行数据获取,就需要添加 show_in_rest 参数设置。同时,可以选择 rest_base 参数来改变原本的 URL 。比如,使用 "book-api" 作为 rest_base 参数值,则使用的控制器 URL 应该为 wp-json/v2/book-api 而不是 wp-json/v2/book 为默认的。

另外,还需要传递一个参数给 rest_controller_class 。这个类必须是一个子类 WP_REST_Controller 。默认情况下,WP_REST_Posts_Controller被用作控制器。

下面注册一个支持 Rest API 的书籍文章类型

/**
* Register a book post type, with REST API support
*
* Based on example at: http://codex.wordpress.org/Function_Reference/register_post_type
*/
add_action( 'init', 'my_book_cpt' );
function my_book_cpt() {
$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,
'show_in_rest' => true,
'rest_base' => 'books-api',
'rest_controller_class' => 'WP_REST_Posts_Controller',
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);

register_post_type( 'book', $args );
}

使用 REST API 支持注册自定义分类

使用 REST API 支持注册自定义分类与使用 REST API 支持注册自定义文章类型相似。在传递给 register_taxonomy 参数时,必须通过show_in_rest并将其设置为 true。可以选择通过rest_base更改分类标准控制 URL 。

注册一个支持 Rest API 自定义分类的示例:

/**
* Register a genre post type, with REST API support
*
* Based on example at: https://codex.wordpress.org/Function_Reference/register_taxonomy
*/
add_action( 'init', 'my_book_taxonomy', 30 );
function my_book_taxonomy() {

$labels = array(
'name' => _x( 'Genres', 'taxonomy general name' ),
'singular_name' => _x( 'Genre', 'taxonomy singular name' ),
'search_items' => __( 'Search Genres' ),
'all_items' => __( 'All Genres' ),
'parent_item' => __( 'Parent Genre' ),
'parent_item_colon' => __( 'Parent Genre:' ),
'edit_item' => __( 'Edit Genre' ),
'update_item' => __( 'Update Genre' ),
'add_new_item' => __( 'Add New Genre' ),
'new_item_name' => __( 'New Genre Name' ),
'menu_name' => __( 'Genre' ),
);

$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'genre' ),
'show_in_rest' => true,
'rest_base' => 'genre',
'rest_controller_class' => 'WP_REST_Terms_Controller',
);

register_taxonomy( 'genre', array( 'book' ), $args );

}

将 REST API 支持添加到现有内容类型

当你添加了自定义文章类型或自定义分类时,需要在注册后添加 Rest API 支持。参数与前面的例子相同,但需要添加到全局$wp_post_types和$wp_taxonomies数组中。

以下是将 REST API 支持添加到现有自定义帖子类型的示例:

/**
* Add REST API support to an already registered post type.
*/
add_action( 'init', 'my_custom_post_type_rest_support', 25 );
function my_custom_post_type_rest_support() {
global $wp_post_types;

//be sure to set this to the name of your post type!
$post_type_name = 'planet';
if( isset( $wp_post_types[ $post_type_name ] ) ) {
$wp_post_types[$post_type_name]->show_in_rest = true;
$wp_post_types[$post_type_name]->rest_base = $post_type_name;
$wp_post_types[$post_type_name]->rest_controller_class = 'WP_REST_Posts_Controller';
}

}

以下是如何将 REST API 支持添加到已经注册的自定义分类的示例。

/**
* Add REST API support to an already registered taxonomy.
*/
add_action( 'init', 'my_custom_taxonomy_rest_support', 25 );
function my_custom_taxonomy_rest_support() {
global $wp_taxonomies;

//be sure to set this to the name of your taxonomy!
$taxonomy_name = 'planet_class';

if ( isset( $wp_taxonomies[ $taxonomy_name ] ) ) {
$wp_taxonomies[ $taxonomy_name ]->show_in_rest = true;
$wp_taxonomies[ $taxonomy_name ]->rest_base = $taxonomy_name;
$wp_taxonomies[ $taxonomy_name ]->rest_controller_class = 'WP_REST_Terms_Controller';
}
}

自定义链接关系

分类法和自定义帖子类型在 WordPress 中有一个内置的关联,但是如果要在两个自定义帖子类型之间建立链接呢?这在 WordPress 本身并没有正式的支持,但是我们可以使用_link关系在任意内容类型之间创建我们自己的连接。

谷歌翻译:Adding REST API Support For Custom Content Types

Vultr VPS

版权声明:艾码汇 除原创声明皆来源于网络搜集,转载请保留原文出处

2条评论

  1. Chi 2018年2月28日 下午1:14

    支持自定义文章类型,可以扩展产品文章了

  2. 亦[奸笑] 2018年6月3日 下午2:20

    报错