Получение записей из произвольного типа записей через WP REST API

4 сент. 2015 г., 10:50:26
Просмотры: 41.4K
Голосов: 23

Как я могу получить все записи из определенного произвольного типа записей с помощью WP REST API (версии 1 или 2)? Я новичок в этом и пытаюсь понять, как это сделать.

В настоящее время я использую 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', 'общее название типа записи' ),
    'singular_name'      => _x( 'The Icons Update', 'единственное число названия типа записи' ),
    'add_new'            => _x( 'Добавить страницу', 'magazine' ),
    'add_new_item'       => __( 'Добавить новую страницу' ),
    'edit_item'          => __( 'Редактировать страницу' ),
    'new_item'           => __( 'Новая страница' ),
    'all_items'          => __( 'Все страницы' ),
    'view_item'          => __( 'Просмотреть страницу' ),
    'search_items'       => __( 'Поиск страниц' ),
    'not_found'          => __( 'Страница не найдена' ),
    'not_found_in_trash' => __( 'В корзине страниц не найдено' ), 
    'parent_item_colon'  => '',
    'menu_icon'          => '',
    'menu_name'          => 'The Icons Update'
);
$args = array(
    'labels'        => $labels,
    'description'   => 'Содержит наши проекты и специфические данные проектов',
    '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' );

Буду признателен за любую помощь в этом вопросе.

0
Все ответы на вопрос 4
1
30

Просто добавьте следующий параметр в функцию register_post_type, его можно разместить перед параметром 'menu_position': 'show_in_rest' => true

Добавление параметра show_in_rest

Если вы используете плагин для регистрации вашего типа записи, вы можете использовать следующий код:

add_action( 'init', 'add_anuncios_to_json_api', 30 );
function add_anuncios_to_json_api(){
    global $wp_post_types;
    $wp_post_types['anuncio']->show_in_rest = true;
}

После этого вы сможете получать список ваших записей по адресу mydomain.com/wp-json/wp/v2/posttype_slug

В моём случае: mydomain.com/wp-json/wp/v2/anuncio

Вы также можете зарегистрировать новый базовый путь, используя следующий код:

add_action( 'init', 'add_anuncios_to_json_api', 30 );
function add_anuncios_to_json_api(){
    global $wp_post_types;
    $wp_post_types['anuncio']->show_in_rest = true;
    $wp_post_types['anuncio']->rest_base = 'clasi';
    $wp_post_types['anuncio']->rest_controller_class = 'WP_REST_Posts_Controller';
}

Просто замените anuncio на слаг вашего типа записи, а 'clasi' будет вашим маршрутом. Например: mydomain.com/wp-json/wp/v2/clasi

8 сент. 2015 г. 04:48:51
Комментарии

Спасибо, это почти решило мою проблему! Теперь я получаю некоторые записи из этого типа постов, но не все они отображаются, и также их данные неполные, например, категория не указана, и мне еще нужно, чтобы отображались дополнительные произвольные поля (в WP REST API v1.2.3 мне удалось сделать так, чтобы ACF отображались). Благодарю за помощь в этом вопросе.

Jeff Jeff
8 сент. 2015 г. 20:34:18
0

Для отображения пользовательских типов записей в версии 2 необходимо добавить 'show_in_rest' => true в аргументы функции register_post_type. После этого ваши записи с этим пользовательским типом будут доступны по эндпоинту: wp-json/wp/v2/ваш-пользовательский-тип-записи.

Источник: http://scottbolinger.com/custom-post-types-wp-api-v2/

21 сент. 2015 г. 15:31:55
1

Вот мой полный ответ:

function prefix_register_post_type()
{
  register_post_type(
    'prefix_portfolio',
    array(
      'labels'        => array(
        'name'               => __('Портфолио', 'text_domain'),
        'singular_name'      => __('Портфолио', 'text_domain'),
        'menu_name'          => __('Портфолио', 'text_domain'),
        'name_admin_bar'     => __('Элемент портфолио', 'text_domain'),
        'all_items'          => __('Все элементы', 'text_domain'),
        'add_new'            => _x('Добавить новый', 'prefix_portfolio', 'text_domain'),
        'add_new_item'       => __('Добавить новый элемент', 'text_domain'),
        'edit_item'          => __('Редактировать элемент', 'text_domain'),
        'new_item'           => __('Новый элемент', 'text_domain'),
        'view_item'          => __('Просмотреть элемент', 'text_domain'),
        'search_items'       => __('Поиск элементов', 'text_domain'),
        'not_found'          => __('Элементы не найдены.', 'text_domain'),
        'not_found_in_trash' => __('В корзине элементы не найдены.', 'text_domain'),
        'parent_item_colon'  => __('Родительские элементы:', 'text_domain'),
      ),
      'public'        => true,
      'menu_position' => 5,
      'supports'      => array(
        'title',
        'editor',
        'thumbnail',
        'excerpt',
        'custom-fields',
      ),
      'taxonomies'    => array(
        'prefix_portfolio_categories',
      ),
      'has_archive'   => true,
      'rewrite'       => array(
        'slug' => 'portfolio',
      ),
    )
  );
}

add_action('init', 'prefix_register_post_type');


function prefix_register_taxonomy()
{
  register_taxonomy(
    'prefix_portfolio_categories',
    array(
      'prefix_portfolio',
    ),
    array(
      'labels'            => array(
        'name'              => _x('Категории', 'prefix_portfolio', 'text_domain'),
        'singular_name'     => _x('Категория', 'prefix_portfolio', 'text_domain'),
        'menu_name'         => __('Категории', 'text_domain'),
        'all_items'         => __('Все категории', 'text_domain'),
        'edit_item'         => __('Редактировать категорию', 'text_domain'),
        'view_item'         => __('Просмотреть категорию', 'text_domain'),
        'update_item'       => __('Обновить категорию', 'text_domain'),
        'add_new_item'      => __('Добавить новую категорию', 'text_domain'),
        'new_item_name'     => __('Название новой категории', 'text_domain'),
        'parent_item'       => __('Родительская категория', 'text_domain'),
        'parent_item_colon' => __('Родительская категория:', 'text_domain'),
        'search_items'      => __('Поиск категорий', 'text_domain'),
      ),
      'show_admin_column' => true,
      'hierarchical'      => true,
      'rewrite'           => array(
        'slug' => 'portfolio/category',
      ),
    )
  );
}

add_action('init', 'prefix_register_taxonomy', 0);

Также следует зарегистрировать таксономию при регистрации пользовательского типа записи.

После этого запрос будет выглядеть так:

wp-json/wp/v2/posts/?taxonomy=prefix_portfolio_categories'&term=ваша-любая-категория

Надеюсь, это поможет вам :)

4 сент. 2015 г. 12:19:05
Комментарии

Огромное спасибо за ваши усилия, но, к сожалению, это тоже не сработало. Я уверен, что уже очень близок к решению, но не могу понять, в чем может быть проблема. Еще раз спасибо

Jeff Jeff
4 сент. 2015 г. 18:53:20
5
-1

Вам следует использовать это:

http://domain.com/wp-json/wp/v2/posts?job-type=your-post-type 

Надеюсь, это сработает :)

4 сент. 2015 г. 11:05:22
Комментарии

Большое спасибо за ваш ответ, но это не сработало :(

Jeff Jeff
4 сент. 2015 г. 11:09:38

Обратите внимание, если вы установили query_var в false при регистрации пользовательской таксономии, вам нужно изменить параметры на: wp-json/wp/v2/posts/?taxonomy=job-type&term=manager (это просто пример)

dev dev
4 сент. 2015 г. 11:13:09

Спасибо, но это тоже не сработало. Может быть проблема в том, как я зарегистрировал пользовательский тип записи? Я обновил вопрос, если бы вы могли взглянуть на него, я был бы очень благодарен

Jeff Jeff
4 сент. 2015 г. 11:38:05

Да, только что проверил обновленный ответ

dev dev
4 сент. 2015 г. 12:22:14

Это больше не работает.

Kelderic Kelderic
14 июл. 2020 г. 20:09:14