В WP REST API отсутствует таксономия для пользовательского типа записи.

Вопрос или проблема

Я использую плагин 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 для определенной таксономии, выполните следующие шаги:

  1. Добавьте код в файл 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, вы сможете увидеть таксономии, связанные с вашими пользовательскими записями. Убедитесь, что вы заменили имя таксономии на актуальное для вашего проекта.

Для получения дальнейшей информации и поддержки, следите за обновлениями на официальном ресурсе.

Оцените материал
Добавить комментарий

Капча загружается...