Получение записей из произвольного типа записей через WP REST API
Как я могу получить все записи из определенного произвольного типа записей с помощью 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' );
Буду признателен за любую помощь в этом вопросе.
Просто добавьте следующий параметр в функцию register_post_type, его можно разместить перед параметром 'menu_position': 'show_in_rest' => true
Если вы используете плагин для регистрации вашего типа записи, вы можете использовать следующий код:
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

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

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

Вот мой полный ответ:
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=ваша-любая-категория
Надеюсь, это поможет вам :)

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

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