[API] Registering A Custom Taxonomy With REST API Support [ok]

Đăng ký phân loại tùy chỉnh với hỗ trợ API REST rất giống với đăng ký loại bài đăng tùy chỉnh: pass 'show_in_rest' => true trong các đối số được chuyển đến register_taxonomy. Bạn có thể tùy ý chuyển rest_base để thay đổi url cơ sở cho các tuyến của đơn vị phân loại.

Bộ điều khiển mặc định cho phân loại là WP_REST_Terms_Controller. Bạn có thể sửa đổi điều này với rest_controller_class nếu bạn chọn sử dụng bộ điều khiển tùy chỉnh.

Dưới đây là một ví dụ về cách đăng ký phân loại tùy chỉnh với hỗ trợ API REST:

Nếu bạn đang sử dụng rest_controller_class tùy chỉnh, thì REST API không thể tự động xác định tuyến đường cho một cụm từ nhất định. Trong trường hợp này, bạn có thể sử dụng bộ lọc rest_route_for_term để cung cấp thông tin này. Điều này cho phép phân loại tùy chỉnh của bạn được định dạng đúng trong điểm cuối Tìm kiếm và cho phép các liên kết khám phá tự động.

/**
 * 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);
}
function my_plugin_rest_route_for_term($route, $term) {
  if ($term->taxonomy === 'genre') {
    $route = '/wp/v2/genre/' . $term->term_id;
  }
  return $route;
}
add_filter('rest_route_for_term', 'my_plugin_rest_route_for_term', 10, 2);

Last updated