Вопрос или проблема
Я использую плагин wp-rest-api v2. Пользовательские типы записей не показывают таксономию. Кто-нибудь может сказать, что не так?
URL: /wp-json/wp/v2/galeri?_embed
{
"id": 275,
"date": "2016-05-07T23:53:17",
"date_gmt": "2016-05-07T20:53:17",
"guid": {
"rendered": "http:\/\/demo.markamiz.com\/?post_type=galeri&p=275"
},
"modified": "2017-07-21T15:07:24",
"modified_gmt": "2017-07-21T12:07:24",
"slug": "samsung-galaxy-s7-edge",
"status": "publish",
"type": "galeri",
"link": "http:\/\/www.teknoever.com\/galeri\/samsung-galaxy-s7-edge\/",
"title": {
"rendered": "Samsung Galaxy S7 Edge"
},
"content": {
"rendered": "<p>Всего <b>7<\/b> страниц, вы на <b>1.<\/b> странице.<br \/>\n<img class=\"alignnone size-full wp-image-276\" src=\"http:\/\/demo.markamiz.com\/wp-content\/uploads\/2016\/05\/150604_samsung-galaxy-s7-1445005423.jpg\" alt=\"150604_samsung-galaxy-s7-1445005423\" width=\"580\" height=\"356\" \/><br \/>\n<!--nextpage--><br \/>\nВсего <b>7<\/b> страниц, вы на <b>2.<\/b> странице.<br \/>\n<img class=\"alignnone size-full wp-image-277\" src=\"http:\/\/demo.markamiz.com\/wp-content\/uploads\/2016\/05\/150604_samsung-galaxy-s7-edge-concept-renders.jpg\" alt=\"150604_samsung-galaxy-s7-edge-concept-renders\" width=\"580\" height=\"386\" \/><br \/>\n<!--nextpage--><br \/>\nВсего <b>7<\/b> страниц, вы на <b>3.<\/b> странице.<br \/>\n<img class=\"alignnone size-full wp-image-278\" src=\"http:\/\/demo.markamiz.com\/wp-content\/uploads\/2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-1.jpg\" alt=\"150605_samsung-galaxy-s7-edge-concept-renders-1\" width=\"580\" height=\"386\" \/><br \/>\n<!--nextpage--><br \/>\nВсего <b>7<\/b> страниц, вы на <b>4.<\/b> странице.<br \/>\n<img class=\"alignnone size-full wp-image-279\" src=\"http:\/\/demo.markamiz.com\/wp-content\/uploads\/2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-2.jpg\" alt=\"150605_samsung-galaxy-s7-edge-concept-renders-2\" width=\"580\" height=\"386\" \/><br \/>\n<!--nextpage--><br \/>\nВсего <b>7<\/b> страниц, вы на <b>5.<\/b> странице.<br \/>\n<img class=\"alignnone size-full wp-image-280\" src=\"http:\/\/demo.markamiz.com\/wp-content\/uploads\/2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-3-1445005456.jpg\" alt=\"150605_samsung-galaxy-s7-edge-concept-renders-3-1445005456\" width=\"580\" height=\"385\" \/><br \/>\n<!--nextpage--><br \/>\nВсего <b>7<\/b> страниц, вы на <b>6.<\/b> странице.<br \/>\n<img class=\"alignnone size-full wp-image-281\" src=\"http:\/\/demo.markamiz.com\/wp-content\/uploads\/2016\/05\/150606_samsung-galaxy-s7-edge-concept-renders-4.jpg\" alt=\"150606_samsung-galaxy-s7-edge-concept-renders-4\" width=\"580\" height=\"386\" \/><br \/>\n<!--nextpage--><br \/>\nВсего <b>7<\/b> страниц, вы на <b>7.<\/b> странице.<br \/>\n<img class=\"alignnone size-full wp-image-282\" src=\"http:\/\/demo.markamiz.com\/wp-content\/uploads\/2016\/05\/150606_samsung-galaxy-s7-edge-concept-renders-5-1.jpg\" alt=\"150606_samsung-galaxy-s7-edge-concept-renders-5\" width=\"580\" height=\"386\" \/><\/p>\n",
"protected": false
},
"excerpt": {
"rendered": "<p>Одним из самых привлекательных моделей года является Samsung Galaxy S7 edge, он становится новой темой нашего обзора.<br \/>\nSamsung внес изменения в свой дизайнерский язык, отложив пластиковый дизайн на задний план и представляя премиум-дизайны из стекла и металла с Galaxy S6 и Galaxy S6 edge, выпущенными в прошлом году. Особенно S6 edge и затем запущенный S6 edge+, были признаны самыми стильными моделями года.<\/p>\n",
"protected": false
},
"author": 4,
"featured_media": 7825,
"menu_order": 0,
"comment_status": "open",
"ping_status": "open",
"template": "",
"meta": [],
"acf": [],
"_links": {
"self": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/galeri\/275"
}],
"collection": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/galeri"
}],
"about": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/types\/galeri"
}],
"author": [{
"embeddable": true,
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/users\/4"
}],
"replies": [{
"embeddable": true,
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/comments?post=275"
}],
"version-history": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/galeri\/275\/revisions"
}],
"wp:featuredmedia": [{
"embeddable": true,
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/media\/7825"
}],
"wp:attachment": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/media?parent=275"
}],
"curies": [{
"name": "wp",
"href": "https:\/\/api.w.org\/{rel}",
"templated": true
}]
},
"_embedded": {
"author": [{
"id": 4,
"name": "Эрдинч",
"url": "http:\/\/www.teknoever.com",
"description": "На протяжении многих лет работал редактором в различных блогах и новостных порталах, а также имеет высокий уровень знаний asp и php, и добивался больших успехов в многих проектах. Сейчас продолжает свою редакторскую карьеру с Tekno Ever. Для получения рекомендаций, пожалуйста, посетите markamiz.com.",
"link": "http:\/\/www.teknoever.com\/yazar\/erdinc\/",
"slug": "erdinc",
"avatar_urls": {
"24": "http:\/\/2.gravatar.com\/avatar\/b37cac9cdbbc2f7cdae3348e514a305b?s=24&d=mm&r=g",
"48": "http:\/\/2.gravatar.com\/avatar\/b37cac9cdbbc2f7cdae3348e514a305b?s=48&d=mm&r=g",
"96": "http:\/\/2.gravatar.com\/avatar\/b37cac9cdbbc2f7cdae3348e514a305b?s=96&d=mm&r=g"
},
"acf": [],
"_links": {
"self": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/users\/4"
}],
"collection": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/users"
}]
}
}],
"wp:featuredmedia": [{
"id": 7825,
"date": "2016-09-06T17:31:52",
"slug": "150605_samsung-galaxy-s7-edge-concept-renders-2",
"type": "attachment",
"link": "http:\/\/www.teknoever.com\/galeri\/samsung-galaxy-s7-edge\/150605_samsung-galaxy-s7-edge-concept-renders-2\/",
"title": {
"rendered": "150605_samsung-galaxy-s7-edge-concept-renders-2"
},
"author": 4,
"acf": [],
"caption": {
"rendered": ""
},
"alt_text": "",
"media_type": "image",
"mime_type": "image\/jpeg",
"media_details": {
"width": 580,
"height": 386,
"file": "2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-2.jpg",
"sizes": {
"thumbnail": {
"file": "150605_samsung-galaxy-s7-edge-concept-renders-2-150x150.jpg",
"width": 150,
"height": 150,
"mime_type": "image\/jpeg",
"source_url": "http:\/\/www.teknoever.com\/wp-content\/uploads\/2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-2-150x150.jpg"
},
"medium": {
"file": "150605_samsung-galaxy-s7-edge-concept-renders-2-300x200.jpg",
"width": 300,
"height": 200,
"mime_type": "image\/jpeg",
"source_url": "http:\/\/www.teknoever.com\/wp-content\/uploads\/2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-2-300x200.jpg"
},
"full": {
"file": "150605_samsung-galaxy-s7-edge-concept-renders-2.jpg",
"width": 580,
"height": 386,
"mime_type": "image\/jpeg",
"source_url": "http:\/\/www.teknoever.com\/wp-content\/uploads\/2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-2.jpg"
}
},
"image_meta": {
"aperture": "0",
"credit": "",
"camera": "",
"caption": "",
"created_timestamp": "0",
"copyright": "",
"focal_length": "0",
"iso": "0",
"shutter_speed": "0",
"title": "",
"orientation": "0",
"keywords": []
}
},
"source_url": "http:\/\/www.teknoever.com\/wp-content\/uploads\/2016\/05\/150605_samsung-galaxy-s7-edge-concept-renders-2.jpg",
"_links": {
"self": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/media\/7825"
}],
"collection": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/media"
}],
"about": [{
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/types\/attachment"
}],
"author": [{
"embeddable": true,
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/users\/4"
}],
"replies": [{
"embeddable": true,
"href": "http:\/\/www.teknoever.com\/wp-json\/wp\/v2\/comments?post=7825"
}]
}
}]
}
}
Проверьте ваши пользовательские типы записей и массивы аргументов пользовательской таксономии и убедитесь, что 'show_in_rest'
установлен на true
в обоих.
Я решил свою проблему. Решение ниже, если у кого-то есть эта проблема, просто добавьте нижеследующий код в functions.php и введите название таксономии в переменной taxonomy_name
add_action( 'init', 'my_custom_taxonomy_rest_support', 25 );
function my_custom_taxonomy_rest_support() {
global $wp_taxonomies;
// обязательно укажите имя вашей таксономии!
$taxonomy_name="galeri-kategori";
if ( isset( $wp_taxonomies[ $taxonomy_name ] ) ) {
$wp_taxonomies[ $taxonomy_name ]->show_in_rest = true;
// Опционально настроить rest_base или класс контроллера
$wp_taxonomies[ $taxonomy_name ]->rest_base = $taxonomy_name;
$wp_taxonomies[ $taxonomy_name ]->rest_controller_class="WP_REST_Terms_Controller";
}
}
Этот фрагмент кода включает поддержку REST API для пользовательской таксономии в WordPress. Он обеспечивает доступность таксономии в REST API и может быть дополнительно настроен при необходимости. Подписывайтесь на нас для получения дополнительной информации: https://emeraldjewelers.com
Ответ или решение
При использовании плагина WP REST API v2 для создания собственных типов записей в WordPress, у вас может возникнуть проблема с отсутствием таксономий в ответах API для этих типов. Если вы обращаетесь к конечной точке API, но не видите таксономии в выводе, вполне вероятно, что соответствующие настройки не включены для вашего пользовательского типа записи или таксономии. Давайте рассмотрим решение этой проблемы.
Проблема: Таксономии отсутствуют в пользовательских типах записей
Когда вы добавляете пользовательский тип записи в WordPress, возможно, вам нужно явно указать, что его таксономии должны быть доступны через REST API. Это достигается с помощью параметра show_in_rest
, который требует установки в true
как для самого пользовательского типа записи, так и для таксономий, которые вы к нему привязываете. Если этого не сделать, таксономии не будут доступны через API.
Решение: Активация поддержки REST API для таксономий
Чтобы включить поддержку REST API для определенной таксономии, выполните следующие шаги:
- Добавьте код в файл
functions.php
вашей темы или в плагин. Это позволит указать WordPress, что ваша таксономия должна быть доступна через REST API.
add_action('init', 'my_custom_taxonomy_rest_support', 25);
function my_custom_taxonomy_rest_support() {
global $wp_taxonomies;
// Убедитесь, что это имя вашей таксономии!
$taxonomy_name = "galeri-kategori"; // замените на имя вашей таксономии
if (isset($wp_taxonomies[$taxonomy_name])) {
$wp_taxonomies[$taxonomy_name]->show_in_rest = true;
// Опционально можно настроить rest_base или контроллер
$wp_taxonomies[$taxonomy_name]->rest_base = $taxonomy_name;
$wp_taxonomies[$taxonomy_name]->rest_controller_class = "WP_REST_Terms_Controller";
}
}
Этот код делает следующее:
- С помощью функции
add_action
он подключает вашу функциюmy_custom_taxonomy_rest_support
на этапе инициализации (init
). - В функции проверяется, доступна ли указанная таксономия в глобальном массиве
$wp_taxonomies
. - Если таксономия существует, параметр
show_in_rest
устанавливается вtrue
, что позволяет использовать эту таксономию через REST API. - Дополнительно, можно настроить
rest_base
иrest_controller_class
, что даст больше возможностей для кастомизации при работе с API.
Заключение
После добавления этого кода ваша таксономия будет доступна через WP REST API. Теперь, когда вы выполните запрос к конечной точке API, например, http://example.com/wp-json/wp/v2/galeri?_embed
, вы сможете увидеть таксономии, связанные с вашими пользовательскими записями. Убедитесь, что вы заменили имя таксономии на актуальное для вашего проекта.
Для получения дальнейшей информации и поддержки, следите за обновлениями на официальном ресурсе.