Маршруты WP из коробки — REST API
В этом разделе находится справочник по REST API в WordPress — это базовые маршруты, который WordPress поддерживает из коробки. Здесь содержатся сведения о конечных точках, доступных через API, их параметрах, формате ответа и т.д.
Список базовых маршрутов WP
Все маршруты WP 5.6
/ /batch/v1 /oembed/1.0 /oembed/1.0/embed /oembed/1.0/proxy /wp/v2 /wp/v2/posts /wp/v2/posts/(?P<id>[\\d]+) /wp/v2/posts/(?P<parent>[\\d]+)/revisions /wp/v2/posts/(?P<parent>[\\d]+)/revisions/(?P<id>[\\d]+) /wp/v2/posts/(?P<id>[\\d]+)/autosaves /wp/v2/posts/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+) /wp/v2/pages /wp/v2/pages/(?P<id>[\\d]+) /wp/v2/pages/(?P<parent>[\\d]+)/revisions /wp/v2/pages/(?P<parent>[\\d]+)/revisions/(?P<id>[\\d]+) /wp/v2/pages/(?P<id>[\\d]+)/autosaves /wp/v2/pages/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+) /wp/v2/media /wp/v2/media/(?P<id>[\\d]+) /wp/v2/media/(?P<id>[\\d]+)/post-process /wp/v2/media/(?P<id>[\\d]+)/edit /wp/v2/blocks /wp/v2/blocks/(?P<id>[\\d]+) /wp/v2/blocks/(?P<id>[\\d]+)/autosaves /wp/v2/blocks/(?P<parent>[\\d]+)/autosaves/(?P<id>[\\d]+) /wp/v2/types /wp/v2/types/(?P<type>[\\w-]+) /wp/v2/statuses /wp/v2/statuses/(?P<status>[\\w-]+) /wp/v2/taxonomies /wp/v2/taxonomies/(?P<taxonomy>[\\w-]+) /wp/v2/categories /wp/v2/categories/(?P<id>[\\d]+) /wp/v2/tags /wp/v2/tags/(?P<id>[\\d]+) /wp/v2/users /wp/v2/users/(?P<id>[\\d]+) /wp/v2/users/me /wp/v2/users/(?P<user_id>(?:[\\d]+|me))/application-passwords /wp/v2/users/(?P<user_id>(?:[\\d]+|me))/application-passwords/(?P<uuid>[\\w\\-]+) /wp/v2/comments /wp/v2/comments/(?P<id>[\\d]+) /wp/v2/search /wp/v2/block-renderer/(?P<name>[a-z0-9-]+/[a-z0-9-]+) /wp/v2/block-types /wp/v2/block-types/(?P<namespace>[a-zA-Z0-9_-]+) /wp/v2/block-types/(?P<namespace>[a-zA-Z0-9_-]+)/(?P<name>[a-zA-Z0-9_-]+) /wp/v2/settings /wp/v2/themes /wp/v2/plugins /wp/v2/plugins/(?P<plugin>[^. .\\/]+)?) /wp/v2/block-directory/search /wp-site-health/v1 /wp-site-health/v1/tests/background-updates /wp-site-health/v1/tests/loopback-requests /wp-site-health/v1/tests/dotorg-communication /wp-site-health/v1/tests/authorization-header /wp-site-health/v1/directory-sizes
Документация по REST API
REST API WordPress предоставляет документацию по самому себе. Она позволят увидеть возможности маршрута: схему маршрута, какие в нем есть эндпоинты, какие параметры может принимать каждый эндпоинт.
Общую доку по всему REST API можно получить GET запросом по основному (корневому) маршруту /wp-json/. Доку по отдельному маршруту можно получить отправив на него OPTIONS запрос.
Информация о REST по главному маршруту /wp-json/Информация о REST по отдельному маршруту /wp-json/wp/v2/categories/
Пример
Демо-установка REST API (для тестирования) доступна по ссылке: https://demo.wp-api.org/wp-json/. Указанный сайт предоставляет данные доступные для чтения.
Например, зайдем на сайт apirequest.io и отправим OPTIONS запрос на маршрут (URL) http://demo.wp-api.org/wp-json/wp/v2/categories/1. В ответ получим документацию по этому маршруту:
{ "namespace": "wp/v2", "methods": [ "GET", "POST", "PUT", "PATCH", "DELETE" ], "endpoints": [ { "methods": [ "GET" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор элемента.", "type": "integer" }, "context": { "required": false, "default": "view", "enum": [ "view", "embed", "edit" ], "description": "Рамки в которых сделан запрос, определяют поля в ответе.", "type": "string" } } }, { "methods": [ "POST", "PUT", "PATCH" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор элемента. ", "type": "integer" }, "description": { "required": false, "description": "HTML описание элемента.", "type": "string" }, "name": { "required": false, "description": "HTML название элемента.", "type": "string" }, "slug": { "required": false, "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.", "type": "string" }, "parent": { "required": false, "description": "ID элемента родителя.", "type": "integer" }, "meta": { "required": false, "description": "Мета поля.", "type": "object" } } }, { "methods": [ "DELETE" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор элемента. ", "type": "integer" }, "force": { "required": false, "default": false, "description": "Должно быть истинно, так как элементы не поддерживают перемещение в корзину.", "type": "boolean" } } } ], "schema": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "category", "type": "object", "properties": { "id": { "description": "Уникальный идентификатор элемента.", "type": "integer", "context": [ "view", "embed", "edit" ], "readonly": true }, "count": { "description": "Число опубликованных записей элемента.", "type": "integer", "context": [ "view", "edit" ], "readonly": true }, "description": { "description": "HTML описание элемента. ", "type": "string", "context": [ "view", "edit" ] }, "link": { "description": "URL элемента.", "type": "string", "format": "uri", "context": [ "view", "embed", "edit" ], "readonly": true }, "name": { "description": "HTML название элемента.", "type": "string", "context": [ "view", "embed", "edit" ], "required": true }, "slug": { "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.", "type": "string", "context": [ "view", "embed", "edit" ] }, "taxonomy": { "description": "Тип атрибуции элемента. ", "type": "string", "enum": [ "category", "post_tag", "nav_menu", "link_category", "post_format" ], "context": [ "view", "embed", "edit" ], "readonly": true }, "parent": { "description": "ID элемента родителя.", "type": "integer", "context": [ "view", "edit" ] }, "meta": { "description": "Мета поля.", "type": "object", "context": [ "view", "edit" ], "properties": [] } } } }
Записи (posts) — (REST API → Маршруты WP из коробки)
Эти маршруты позволяют получить/создать/обновить/удалить записи или отдельную запись (пост).
Возможные маршруты (конечные точки маршрутов описаны ниже):
/wp/v2/posts // работает со всеми постами /wp/v2/posts/{ID} // работает с указанным вместо {ID} постом
Класс контроллера: WP_REST_Posts_Controller{}
Схема ресурса
Схема показывает все поля, которые существуют для объекта запись: поля объекта, которые вернет запрос.
Параметр | Контекст | Описание |
---|---|---|
date строка | view, edit, embed | Дата публикации записи в часовом поясе сайта. |
date_gmt строка/datetime | view, edit | Дата публикации записи, как GMT. |
guid объект | view, edit | Глобальный уникальный идентификатор записи. Только для чтения. |
id число | view, edit, embed | Уникальный идентификатор записи. Только для чтения. |
link строка | view, edit, embed | Ссылка на запись. Только для чтения. |
modified строка | view, edit | Дата последнего изменения записи в часовом поясе сайта. Только для чтения. |
modified_gmt строка | view, edit | Дата последнего изменения записи, как GMT. Только для чтения. |
slug строка | view, edit, embed | Алфавитно-цифровой идентификатор записи, уникальный для его типа. Ещё называют ярлыком. |
status строка | view, edit | Статус записи. Может быть publish, future, draft, pending, private. |
type строка | view, edit, embed | Тип записи. Только для чтения. |
password строка | edit | Пароль для защиты доступа к контенту и цитате (отрывку). |
title объект | view, edit, embed | Заголовок записи. |
content объект | view, edit | Контент записи. |
author число | view, edit, embed | Идентификатор (ID) автора записи |
excerpt объект | view, edit, embed | Цитата (отрывок) записи. |
featured_media число | view, edit, embed | Идентификатор (ID) миниатюры (изображения) записи. |
comment_status строка | view, edit | Можно ли оставлять комментарии к записи или нет. Может быть open или closed. |
ping_status строка | view, edit | Статус пингов/трэкбэков, может быть open или closed. |
format строка | view, edit | Формат записи. Может быть: standard, aside, chat, gallery, link, image, quote, status, video, audio. |
meta массив | view, edit | Значения метаполей. Массив объектов. |
sticky true/false | view, edit | Является ли запись липкой или нет. |
template строка | view, edit | Файл темы, который используется для отображения записи. |
categories массив | view, edit | Массив с ID рубрик, к которым принадлежит запись. |
tags массив | view, edit | Массив с ID меток (тегов), к которым принадлежит запись. |
меню
wp/v2/posts
Запрос OPTIONS к маршруту вернет полное описание этого маршрута: эндпоинты их параметры, схему.
$ curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/posts
{ "namespace": "wp/v2", "methods": [ "GET", "POST", "PUT", "PATCH", "DELETE" ], "endpoints": [ { "methods": [ "GET" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "context": { "required": false, "default": "view", "enum": [ "view", "embed", "edit" ], "description": "Рамки в которых сделан запрос, определяют поля в ответе.", "type": "string" }, "password": { "required": false, "description": "Пароль для записи, если она защищена паролем. ", "type": "string" } } }, { "methods": [ "POST", "PUT", "PATCH" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "date": { "required": false, "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string" }, "date_gmt": { "required": false, "description": "Время публикации объекта, по GMT.", "type": "string" }, "slug": { "required": false, "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа.", "type": "string" }, "status": { "required": false, "enum": [ "publish", "future", "draft", "pending", "private" ], "description": "Именованный статус для объекта.", "type": "string" }, "password": { "required": false, "description": "Пароль для защиты содержания и отрывка.", "type": "string" }, "title": { "required": false, "description": "Название для объекта. ", "type": "object" }, "content": { "required": false, "description": "Содержимое объекта.", "type": "object" }, "author": { "required": false, "description": "ID автора объекта.", "type": "integer" }, "excerpt": { "required": false, "description": "Отрывок объекта.", "type": "object" }, "featured_media": { "required": false, "description": "ID избранного медиа для объекта.", "type": "integer" }, "comment_status": { "required": false, "enum": [ "open", "closed" ], "description": "Открыты ли комментарии для объекта.", "type": "string" }, "ping_status": { "required": false, "enum": [ "open", "closed" ], "description": "Принимает ли объект уведомления.", "type": "string" }, "format": { "required": false, "enum": [ "standard", "aside", "chat", "gallery", "link", "image", "quote", "status", "video", "audio" ], "description": "Формат для объекта. ", "type": "string" }, "meta": { "required": false, "description": "Мета поля.", "type": "object" }, "sticky": { "required": false, "description": "Считать ли объект прилепленным или нет.", "type": "boolean" }, "template": { "required": false, "description": "Файл темы используемый для показа объекта.", "type": "string" }, "categories": { "required": false, "description": "Элементы назначенные объекту в таксономии category.", "type": "array", "items": { "type": "integer" } }, "tags": { "required": false, "description": "Элементы назначенные объекту в таксономии post_tag.", "type": "array", "items": { "type": "integer" } } } }, { "methods": [ "DELETE" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "force": { "required": false, "default": false, "description": "Игнорировать ли перемещение в корзину и принудительно удалять. ", "type": "boolean" } } } ], "schema": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "post", "type": "object", "properties": { "date": { "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit", "embed" ] }, "date_gmt": { "description": "Время публикации объекта, по GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ] }, "guid": { "description": "Глобальный уникальный идентификатор для объекта.", "type": "object", "context": [ "view", "edit" ], "readonly": true, "properties": { "raw": { "description": "GUID для объекта, как он существует в базе данных.", "type": "string", "context": [ "edit" ], "readonly": true }, "rendered": { "description": "GUID для объекта, преобразованный для показа. ", "type": "string", "context": [ "view", "edit" ], "readonly": true } } }, "id": { "description": "Уникальный идентификатор для объекта.", "type": "integer", "context": [ "view", "edit", "embed" ], "readonly": true }, "link": { "description": "URL объекта.", "type": "string", "format": "uri", "context": [ "view", "edit", "embed" ], "readonly": true }, "modified": { "description": "Дата последнего изменения объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "modified_gmt": { "description": "Дата последнего изменения объекта, в GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "slug": { "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа. ", "type": "string", "context": [ "view", "edit", "embed" ] }, "status": { "description": "Именованный статус для объекта.", "type": "string", "enum": [ "publish", "future", "draft", "pending", "private" ], "context": [ "view", "edit" ] }, "type": { "description": "Тип записи для объекта.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "password": { "description": "Пароль для защиты содержания и отрывка.", "type": "string", "context": [ "edit" ] }, "title": { "description": "Название для объекта.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Название объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML название объекта, преобразованное для показа. ", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "content": { "description": "Содержимое объекта.", "type": "object", "context": [ "view", "edit" ], "properties": { "raw": { "description": "Содержимое объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML содержимое объекта преобразованное для показа.", "type": "string", "context": [ "view", "edit" ], "readonly": true }, "protected": { "description": "Защищено ли содержимое паролем.", "type": "boolean", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "author": { "description": "ID автора объекта.", "type": "integer", "context": [ "view", "edit", "embed" ] }, "excerpt": { "description": "Отрывок объекта.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Отрывок объекта как он существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML отрывок объекта, преобразованный для показа.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "protected": { "description": "Защищать ли паролем отрывок.", "type": "boolean", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "featured_media": { "description": "ID избранного медиа для объекта.", "type": "integer", "context": [ "view", "edit", "embed" ] }, "comment_status": { "description": "Открыты ли комментарии для объекта.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "ping_status": { "description": "Принимает ли объект уведомления.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "format": { "description": "Формат для объекта.", "type": "string", "enum": [ "standard", "aside", "chat", "gallery", "link", "image", "quote", "status", "video", "audio" ], "context": [ "view", "edit" ] }, "meta": { "description": "Мета поля.", "type": "object", "context": [ "view", "edit" ], "properties": [] }, "sticky": { "description": "Считать ли объект прилепленным или нет.", "type": "boolean", "context": [ "view", "edit" ] }, "template": { "description": "Файл темы используемый для показа объекта.", "type": "string", "context": [ "view", "edit" ] }, "categories": { "description": "Элементы назначенные объекту в таксономии category.", "type": "array", "items": { "type": "integer" }, "context": [ "view", "edit" ] }, "tags": { "description": "Элементы назначенные объекту в таксономии post_tag.", "type": "array", "items": { "type": "integer" }, "context": [ "view", "edit" ] } }, "links": [ { "rel": "https://api.w.org/action-publish", "title": "Текущий пользователь может опубликовать эту запись.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "status": { "type": "string", "enum": [ "publish", "future" ] } } } }, { "rel": "https://api.w.org/action-sticky", "title": "Текущий пользователь может сделать эту запись прикрепленной.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "sticky": { "type": "boolean" } } } }, { "rel": "https://api.w.org/action-assign-author", "title": "Текущий пользователь может сменить автора для этой записи.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "author": { "type": "integer" } } } }, { "rel": "https://api.w.org/action-assign-categories", "title": "Текущий пользователь может назначать элементы в таксономии category.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "categories": { "type": "array", "items": { "type": "integer" } } } } }, { "rel": "https://api.w.org/action-create-categories", "title": "Текущий пользователь может создавать элементы в таксономии category.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "categories": { "type": "array", "items": { "type": "integer" } } } } }, { "rel": "https://api.w.org/action-assign-tags", "title": "Текущий пользователь может назначать элементы в таксономии post_tag.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "tags": { "type": "array", "items": { "type": "integer" } } } } }, { "rel": "https://api.w.org/action-create-tags", "title": "Текущий пользователь может создавать элементы в таксономии post_tag.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "tags": { "type": "array", "items": { "type": "integer" } } } } } ] } }
меню
Список записей
За один запрос можно получить коллекцию из записей по тем или иным условиям. Алгоритм схож с работой класса WP_Query и функций на его основе.
Вид запроса
Доступ: публичный
GET /wp/v2/posts
Параметры запроса
- context
- Область, в которой выполняется запрос; определяет поля, присутствующие в ответе. Может быть view, embed, edit.
По умолчанию: view - page
- Текущая страница коллекции.
По умолчанию: 1 - per_page
- Максимальное количество записей в результирующем наборе.
По умолчанию: 10 (от 1 до 100 включительно) - search
- Ограничить ответ по записям строкой (поисковой фразой).
- after
- Ограничить ответ по записям, опубликованных после заданной даты, соответствующей ISO8601.
- before
- Ограничить ответ по записям, опубликованных до заданной даты, соответствующей ISO8601.
- author
- Указывает записи каких авторов надо вернуть.
- author_exclude
- Указывает записи каких авторов не надо возвращать.
- exclude
- Исключает из набора записи по их ID.
- include
- Включает в набор записи по их ID. В наборе будут присутствовать только те записи, ID которых были указаны.
- offset
- Смещение (отступ) набора результатов на указанное число.
По умолчанию: 1 - order
- Сортировка записей в выборке. Может быть asc или desc.
По умолчанию: desc - orderby
- Сортировка записей в выборке по атрибутам. Может быть author, date, id, include, modified, parent, relevance, slug, title.
По умолчанию: date - slug
- Ограничение выборки по указанному одному ярлыку записи или нескольким.
- status
- Ограничение выборки по одному статусу или нескольким.
По умолчанию: publish - categories
- Ограничение выборки по указанной категории (рубрике) или рубрикам.
- categories_exclude:
- Исключает из выборки записи, принадлежащие указанной категории (рубрике) или рубрикам.
- tags
- Ограничение выборки по указанной метке (тегу) или меткам.
- tags_exclude:
- Исключает из выборки записи, принадлежащие указанной метке (тегу) или меткам.
- sticky
- Выборка будет состоять только из «липких» записей.
Пример запроса
Ссылки рабочие, можно открыть в браузере и посмотреть результат.
1) Запрос на получение массива всех записей:
https://demo.wp-api.org/wp-json/wp/v2/posts/
Вернется массив объектов, где каждый объект записи схож с тем, что описан в пункте «Получить запись»:
[ { ... данные записи <id> ... }, { ... данные записи <id> ... }, { ... данные записи <id> ... } ]
2) Вернет записи, у которых автор с ID=1
https://demo.wp-api.org/wp-json/wp/v2/posts/?author=1
3) Вернет записи, у которых автор с ID=1 и которые принадлежат рубрике с ID=11
https://demo.wp-api.org/wp-json/wp/v2/posts/?author=1&categories=11
меню
Создание записи
Алгоритм схож с работой функции wp_insert_post().
Вид запроса
Доступ: нужна авторизация
POST /wp/v2/posts
Параметры запроса
- date(строка)
- Дата публикации записи в часовом поясе сайта.
- date_gmt(строка/datetime)
- Дата публикации записи, как GMT.
- slug(строка)
- Алфавитно-цифровой идентификатор записи, уникальный для его типа. Ещё называют ярлыком.
- status(строка)
- Статус записи. Может быть publish, future, draft, pending, private.
- password(строка)
- Пароль для защиты доступа к контенту и цитате (отрывку).
- title(объект)
- Заголовок записи.
- content(объект)
- Контент записи.
- author(число)
- Идентификатор (ID) автора записи.
- excerpt(объект)
- Цитата (отрывок) записи.
- featured_media(число)
- Идентификатор (ID) миниатюры (изображения) записи.
- comment_status(строка)
- Можно ли оставлять комментарии к записи или нет. Может быть open или closed.
- ping_status(строка)
- Статус пингов/трэкбэков, может быть open или closed.
- format(строка)
- Статус записи. Может быть: standard, aside, chat, gallery, link, image, quote, status, video, audio.
- meta(массив)
- Значения метаполей. Массив объектов.
- sticky(логический)
- Является ли запись липкой или нет.
- template(строка)
- Файл темы, который используется для отображения записи.
- categories(массив)
- Массив с ID рубрик (категорий), к которым принадлежит запись.
- tags(массив)
- Массив с ID меток (тегов), к которым принадлежит запись.
Пример запроса
POST http://wptest.ru/wp-json/wp/v2/posts/?title=Заголовок&slug=my-post&status=publish
меню
wp/v2/posts/{id}
Запрос OPTIONS к маршруту вернет полное описание этого маршрута: эндпоинты их параметры, схему.
$ curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/posts/1
{ "namespace": "wp/v2", "methods": [ "GET", "POST", "PUT", "PATCH", "DELETE" ], "endpoints": [ { "methods": [ "GET" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "context": { "required": false, "default": "view", "enum": [ "view", "embed", "edit" ], "description": "Рамки в которых сделан запрос, определяют поля в ответе.", "type": "string" }, "password": { "required": false, "description": "Пароль для записи, если она защищена паролем.", "type": "string" } } }, { "methods": [ "POST", "PUT", "PATCH" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "date": { "required": false, "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string" }, "date_gmt": { "required": false, "description": "Время публикации объекта, по GMT.", "type": "string" }, "slug": { "required": false, "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа.", "type": "string" }, "status": { "required": false, "enum": [ "publish", "future", "draft", "pending", "private" ], "description": "Именованный статус для объекта.", "type": "string" }, "password": { "required": false, "description": "Пароль для защиты содержания и отрывка.", "type": "string" }, "title": { "required": false, "description": "Название для объекта.", "type": "object" }, "content": { "required": false, "description": "Содержимое объекта.", "type": "object" }, "author": { "required": false, "description": "ID автора объекта.", "type": "integer" }, "excerpt": { "required": false, "description": "Отрывок объекта.", "type": "object" }, "featured_media": { "required": false, "description": "ID избранного медиа для объекта.", "type": "integer" }, "comment_status": { "required": false, "enum": [ "open", "closed" ], "description": "Открыты ли комментарии для объекта.", "type": "string" }, "ping_status": { "required": false, "enum": [ "open", "closed" ], "description": "Принимает ли объект уведомления.", "type": "string" }, "format": { "required": false, "enum": [ "standard", "aside", "chat", "gallery", "link", "image", "quote", "status", "video", "audio" ], "description": "Формат для объекта.", "type": "string" }, "meta": { "required": false, "description": "Мета поля.", "type": "object" }, "sticky": { "required": false, "description": "Считать ли объект прилепленным или нет.", "type": "boolean" }, "template": { "required": false, "description": "Файл темы используемый для показа объекта.", "type": "string" }, "categories": { "required": false, "description": "Элементы назначенные объекту в таксономии category.", "type": "array", "items": { "type": "integer" } }, "tags": { "required": false, "description": "Элементы назначенные объекту в таксономии post_tag.", "type": "array", "items": { "type": "integer" } } } }, { "methods": [ "DELETE" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "force": { "required": false, "default": false, "description": "Игнорировать ли перемещение в корзину и принудительно удалять.", "type": "boolean" } } } ], "schema": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "post", "type": "object", "properties": { "date": { "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit", "embed" ] }, "date_gmt": { "description": "Время публикации объекта, по GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ] }, "guid": { "description": "Глобальный уникальный идентификатор для объекта.", "type": "object", "context": [ "view", "edit" ], "readonly": true, "properties": { "raw": { "description": "GUID для объекта, как он существует в базе данных.", "type": "string", "context": [ "edit" ], "readonly": true }, "rendered": { "description": "GUID для объекта, преобразованный для показа.", "type": "string", "context": [ "view", "edit" ], "readonly": true } } }, "id": { "description": "Уникальный идентификатор для объекта.", "type": "integer", "context": [ "view", "edit", "embed" ], "readonly": true }, "link": { "description": "URL объекта.", "type": "string", "format": "uri", "context": [ "view", "edit", "embed" ], "readonly": true }, "modified": { "description": "Дата последнего изменения объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "modified_gmt": { "description": "Дата последнего изменения объекта, в GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "slug": { "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа.", "type": "string", "context": [ "view", "edit", "embed" ] }, "status": { "description": "Именованный статус для объекта.", "type": "string", "enum": [ "publish", "future", "draft", "pending", "private" ], "context": [ "view", "edit" ] }, "type": { "description": "Тип записи для объекта.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "password": { "description": "Пароль для защиты содержания и отрывка.", "type": "string", "context": [ "edit" ] }, "title": { "description": "Название для объекта.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Название объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML название объекта, преобразованное для показа.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "content": { "description": "Содержимое объекта.", "type": "object", "context": [ "view", "edit" ], "properties": { "raw": { "description": "Содержимое объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML содержимое объекта преобразованное для показа.", "type": "string", "context": [ "view", "edit" ], "readonly": true }, "protected": { "description": "Защищено ли содержимое паролем.", "type": "boolean", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "author": { "description": "ID автора объекта.", "type": "integer", "context": [ "view", "edit", "embed" ] }, "excerpt": { "description": "Отрывок объекта.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Отрывок объекта как он существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML отрывок объекта, преобразованный для показа.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "protected": { "description": "Защищать ли паролем отрывок.", "type": "boolean", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "featured_media": { "description": "ID избранного медиа для объекта.", "type": "integer", "context": [ "view", "edit", "embed" ] }, "comment_status": { "description": "Открыты ли комментарии для объекта.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "ping_status": { "description": "Принимает ли объект уведомления.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "format": { "description": "Формат для объекта.", "type": "string", "enum": [ "standard", "aside", "chat", "gallery", "link", "image", "quote", "status", "video", "audio" ], "context": [ "view", "edit" ] }, "meta": { "description": "Мета поля.", "type": "object", "context": [ "view", "edit" ], "properties": [] }, "sticky": { "description": "Считать ли объект прилепленным или нет.", "type": "boolean", "context": [ "view", "edit" ] }, "template": { "description": "Файл темы используемый для показа объекта.", "type": "string", "context": [ "view", "edit" ] }, "categories": { "description": "Элементы назначенные объекту в таксономии category.", "type": "array", "items": { "type": "integer" }, "context": [ "view", "edit" ] }, "tags": { "description": "Элементы назначенные объекту в таксономии post_tag.", "type": "array", "items": { "type": "integer" }, "context": [ "view", "edit" ] } }, "links": [ { "rel": "https://api.w.org/action-publish", "title": "Текущий пользователь может опубликовать эту запись.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "status": { "type": "string", "enum": [ "publish", "future" ] } } } }, { "rel": "https://api.w.org/action-sticky", "title": "Текущий пользователь может сделать эту запись прикрепленной.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "sticky": { "type": "boolean" } } } }, { "rel": "https://api.w.org/action-assign-author", "title": "Текущий пользователь может сменить автора для этой записи.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "author": { "type": "integer" } } } }, { "rel": "https://api.w.org/action-assign-categories", "title": "Текущий пользователь может назначать элементы в таксономии category.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "categories": { "type": "array", "items": { "type": "integer" } } } } }, { "rel": "https://api.w.org/action-create-categories", "title": "Текущий пользователь может создавать элементы в таксономии category.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "categories": { "type": "array", "items": { "type": "integer" } } } } }, { "rel": "https://api.w.org/action-assign-tags", "title": "Текущий пользователь может назначать элементы в таксономии post_tag.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "tags": { "type": "array", "items": { "type": "integer" } } } } }, { "rel": "https://api.w.org/action-create-tags", "title": "Текущий пользователь может создавать элементы в таксономии post_tag.", "href": "http://wptest.ru/wp-json/wp/v2/posts/{id}", "targetSchema": { "type": "object", "properties": { "tags": { "type": "array", "items": { "type": "integer" } } } } } ] } }
меню
Получение записи
Алгоритм схож с работой функции get_post().
Вид запроса
Доступ: публичный
GET /wp/v2/posts/{id}
Параметры запроса
- id (обязательный)
- Уникальный идентификатор записи
- context
- Область, в которой выполняется запрос; определяет поля, присутствующие в ответе. Может быть view, embed, edit.
По умолчанию: view - password
- Пароль для получения доступа к защищенной паролем записи.
Пример запроса
$ curl http://demo.wp-api.org/wp-json/wp/v2/posts/{id}
Пример запроса объект записи с ID=1:
https://demo.wp-api.org/wp-json/wp/v2/posts/1
Ответ:
{ "id":1, "date":"2017-05-23T06:25:50", "date_gmt":"2017-05-23T06:25:50", "guid":{ "rendered":"http://demo.wp-api.org/?p=1" }, "modified":"2017-05-23T06:25:50", "modified_gmt":"2017-05-23T06:25:50", "slug":"hello-world", "status":"publish", "type":"post", "link":"https://demo.wp-api.org/2017/05/23/hello-world/", "title":{ "rendered":"Hello world!" }, "content":{ "rendered":"<p>Welcome to <a href=\"http://wp-api.org/\">WP API Demo Sites</a>. This is your first post. Edit or delete it, then start blogging!</p>\n", "protected":false }, "excerpt":{ "rendered":"<p>Welcome to WP API Demo Sites. This is your first post. Edit or delete it, then start blogging!</p>\n", "protected":false }, "author":1, "featured_media":0, "comment_status":"open", "ping_status":"open", "sticky":false, "template":"", "format":"standard", "meta":[ ], "categories":[ 1 ], "tags":[ ], "_links":{ "self":[ { "href":"https://demo.wp-api.org/wp-json/wp/v2/posts/1" } ], "collection":[ { "href":"https://demo.wp-api.org/wp-json/wp/v2/posts" } ], "about":[ { "href":"https://demo.wp-api.org/wp-json/wp/v2/types/post" } ], "author":[ { "embeddable":true, "href":"https://demo.wp-api.org/wp-json/wp/v2/users/1" } ], "replies":[ { "embeddable":true, "href":"https://demo.wp-api.org/wp-json/wp/v2/comments?post=1" } ], "version-history":[ { "href":"https://demo.wp-api.org/wp-json/wp/v2/posts/1/revisions" } ], "wp:attachment":[ { "href":"https://demo.wp-api.org/wp-json/wp/v2/media?parent=1" } ], "wp:term":[ { "taxonomy":"category", "embeddable":true, "href":"https://demo.wp-api.org/wp-json/wp/v2/categories?post=1" }, { "taxonomy":"post_tag", "embeddable":true, "href":"https://demo.wp-api.org/wp-json/wp/v2/tags?post=1" } ], "curies":[ { "name":"wp", "href":"https://api.w.org/{rel}", "templated":true } ] } }
меню
Обновление записи
Алгоритм схож с работой функции wp_update_post().
Вид запроса
Доступ: нужна авторизация
POST|PUT|PATCH /wp/v2/posts/{id}
Параметры запроса
- id(обязательный)
- Уникальный идентификатор записи, которую надо обновить.
- Остальные параметры
- Полностью совпадают с параметрами пункта «Создание записи».
Пример запроса
$ curl -X POST http://demo.wp-api.org/wp-json/wp/v2/posts/<id> -d '{"title":"My New Title"}'
Удаление записи
Алгоритм схож с работой функции wp_delete_post().
Вид запроса
Доступ: нужна авторизация
DELETE /wp/v2/posts/{id}
Параметры запроса
- id(обязательный)
- Уникальный идентификатор записи, которую надо удалить.
- force(логический)
- Удалять мимо корзины, если она включена.
true
— принудительное удаление навсегда.
По умолчанию: false
Пример запроса
Удалим пост 25:
$ curl -X DELETE http://demo.wp-api.org/wp-json/wp/v2/posts/25
Категории (categories) — (REST API → Маршруты WP из коробки)
Эти маршруты позволяют получить/создать/обновить/удалить рубрики (категории).
Возможные маршруты (конечные точки маршрутов описаны ниже):
/wp/v2/categories // работает со всеми рубриками /wp/v2/categories/{ID} // работает с указанной вместо {ID} рубрикой
Класс контроллера: WP_REST_Terms_Controller{}
Схема ресурса
Схема показывает все поля, которые существуют для объекта: поля объекта которые вернет запрос.
Параметр | Контекст | Описание |
---|---|---|
id число | view, edit, embed | ID термина (рубрики). Только для чтения. |
count число | view, edit | Количество записей находящихся в термине (рубрике). Только для чтения. |
description строка | view, edit | Описание термина (рубрики). |
link строка, uri | view, edit, embed | URL термина (рубрики). Только для чтения. |
name строка | view, edit, embed | Название термина (рубрики). |
slug строка | view, edit, embed | Слаг (ярлык) термина (рубрики), обычно создается из названия. |
taxonomy строка | view, edit, embed | Название таксономии. Только для чтения. Может быть: category, post_tag, nav_menu, link_category, post_format |
parent число | view, edit | ID родительского термина. |
meta объект | view, edit | Мета поля. |
Контекст — показывает какие поля объекта вернуться в ответе при создании запроса в указанном контексте. Например, при обновлении или создании рубрики вернуться поля соответствующие контексту edit.
меню
wp/v2/categories
Запрос OPTIONS к маршруту вернет полное описание этого маршрута: эндпоинты их параметры, схему.
$ curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/categories
{ "namespace": "wp/v2", "methods": [ "GET", "POST" ], "endpoints": [ { "methods": [ "GET" ], "args": { "context": { "required": false, "default": "view", "enum": [ "view", "embed", "edit" ], "description": "Рамки в которых сделан запрос, определяют поля в ответе.", "type": "string" }, "page": { "required": false, "default": 1, "description": "Текущая страница коллекции.", "type": "integer" }, "per_page": { "required": false, "default": 10, "description": "Максимальное число объектов возвращаемое в выборке.", "type": "integer" }, "search": { "required": false, "description": "Ограничить результаты до совпадающих со строкой.", "type": "string" }, "exclude": { "required": false, "default": [], "description": "Убедиться что выборка исключает определенные ID.", "type": "array", "items": { "type": "integer" } }, "include": { "required": false, "default": [], "description": "Ограничить выборку до определенных ID.", "type": "array", "items": { "type": "integer" } }, "order": { "required": false, "default": "asc", "enum": [ "asc", "desc" ], "description": "Упорядочить сортировку атрибута по возрастанию или убыванию.", "type": "string" }, "orderby": { "required": false, "default": "name", "enum": [ "id", "include", "name", "slug", "include_slugs", "term_group", "description", "count" ], "description": "Сортировать коллекцию по атрибутам элемента.", "type": "string" }, "hide_empty": { "required": false, "default": false, "description": "Скрывать ли элементы не назначенные ни одной записи.", "type": "boolean" }, "parent": { "required": false, "description": "Ограничить выборку элементами назначенными определенному родителю.", "type": "integer" }, "post": { "required": false, "description": "Ограничить выборку элементами назначенными определенной записи.", "type": "integer" }, "slug": { "required": false, "description": "Ограничить выборку элементами с одним или более специальными ярлыками. ", "type": "array", "items": { "type": "string" } } } }, { "methods": [ "POST" ], "args": { "description": { "required": false, "description": "HTML описание элемента.", "type": "string" }, "name": { "required": true, "description": "HTML название элемента.", "type": "string" }, "slug": { "required": false, "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.", "type": "string" }, "parent": { "required": false, "description": "ID элемента родителя.", "type": "integer" }, "meta": { "required": false, "description": "Мета поля.", "type": "object" } } } ], "schema": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "category", "type": "object", "properties": { "id": { "description": "Уникальный идентификатор элемента.", "type": "integer", "context": [ "view", "embed", "edit" ], "readonly": true }, "count": { "description": "Число опубликованных записей элемента.", "type": "integer", "context": [ "view", "edit" ], "readonly": true }, "description": { "description": "HTML описание элемента.", "type": "string", "context": [ "view", "edit" ] }, "link": { "description": "URL элемента.", "type": "string", "format": "uri", "context": [ "view", "embed", "edit" ], "readonly": true }, "name": { "description": "HTML название элемента.", "type": "string", "context": [ "view", "embed", "edit" ], "required": true }, "slug": { "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.", "type": "string", "context": [ "view", "embed", "edit" ] }, "taxonomy": { "description": "Тип атрибуции элемента.", "type": "string", "enum": [ "category", "post_tag", "nav_menu", "link_category", "post_format" ], "context": [ "view", "embed", "edit" ], "readonly": true }, "parent": { "description": "ID элемента родителя.", "type": "integer", "context": [ "view", "edit" ] }, "meta": { "description": "Мета поля.", "type": "object", "context": [ "view", "edit" ], "properties": [] } } }, "_links": { "self": "http://wptest.ru/wp-json/wp/v2/categories" } }
меню
Список категорий
Получает список категорий, на подобие get_categories()
Вид запроса
GET /wp/v2/categories
Параметры запроса
- context
- Область, в которой выполняется запрос; определяет поля присутствующие в ответе.
Может быть: view, embed, edit
По умолчанию: view - page
- Текущая страница пагинации.
По умолчанию: 1 - per_page
- Максимальное число элементов, возвращаемых в результате.
По умолчанию: 10 - search
- Ограничьте результаты теми, которые соответствуют строке.
- exclude
- Исключает рубрики по ID.
- include
- Показывает только указанные тут рубрики. Указывается ID.
- orderby
- По какому полю сортировать?
Может быть: id, include, name, slug, term_group, description, count
По умолчанию: name - order
- Как сортировать?
Может быть: asc, desc
По умолчанию: asc - hide_empty
- Спрятать ли пустые рубрики (где нет постов)?
- parent
- ID родительской рубрики, детей которых нужно получить.
- post
- ID поста, рубрики которого нужно получить.
- slug
- Укажите слаги рубрик которые нужно получить.
Пример запроса
http://demo.wp-api.org/wp-json/wp/v2/categories
Получим рубрики поста 1
http://demo.wp-api.org/wp-json/wp/v2/categories?post=1
меню
Создание категории
Алгоритм схож с работой функции wp_insert_category()
Вид запроса
Доступ: нужна авторизация
POST /wp/v2/categories
Параметры запроса
- name(обязательный)
- Название термина (рубрики).
- description
- Описание термина (рубрики).
- slug
- Слаг (ярлык) термина (рубрики), обычно создается из названия.
- parent
- ID родительского термина.
- meta
- Мета поля.
Пример запроса:
POST http://wptest.ru/wp-json/wp/v2/categories?name=Моя рубрика
Ответ
{ "id": 6, "count": 0, "description": "", "link": "http://wptest.ru/cat/%d0%bc%d0%be%d1%8f-%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0/", "name": "Моя рубрика", "slug": "%d0%bc%d0%be%d1%8f-%d1%80%d1%83%d0%b1%d1%80%d0%b8%d0%ba%d0%b0", "taxonomy": "category", "parent": 0, "meta": [], "_links": { "self": [ { "href": "http://wptest.ru/wp-json/wp/v2/categories/6" } ], "collection": [ { "href": "http://wptest.ru/wp-json/wp/v2/categories" } ], "about": [ { "href": "http://wptest.ru/wp-json/wp/v2/taxonomies/category" } ], "wp:post_type": [ { "href": "http://wptest.ru/wp-json/wp/v2/posts?categories=6" } ], "curies": [ { "name": "wp", "href": "https://api.w.org/{rel}", "templated": true } ] } }
меню
wp/v2/categories/{id}
Запрос OPTIONS к маршруту вернет полное описание этого маршрута: эндпоинты их параметры, схему.
$ curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/categories/1
{ "namespace": "wp/v2", "methods": [ "GET", "POST", "PUT", "PATCH", "DELETE" ], "endpoints": [ { "methods": [ "GET" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор элемента.", "type": "integer" }, "context": { "required": false, "default": "view", "enum": [ "view", "embed", "edit" ], "description": "Рамки в которых сделан запрос, определяют поля в ответе.", "type": "string" } } }, { "methods": [ "POST", "PUT", "PATCH" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор элемента.", "type": "integer" }, "description": { "required": false, "description": "HTML описание элемента.", "type": "string" }, "name": { "required": false, "description": "HTML название элемента.", "type": "string" }, "slug": { "required": false, "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.", "type": "string" }, "parent": { "required": false, "description": "ID элемента родителя.", "type": "integer" }, "meta": { "required": false, "description": "Мета поля.", "type": "object" } } }, { "methods": [ "DELETE" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор элемента.", "type": "integer" }, "force": { "required": false, "default": false, "description": "Должно быть истинно, так как элементы не поддерживают перемещение в корзину.", "type": "boolean" } } } ], "schema": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "category", "type": "object", "properties": { "id": { "description": "Уникальный идентификатор элемента.", "type": "integer", "context": [ "view", "embed", "edit" ], "readonly": true }, "count": { "description": "Число опубликованных записей элемента.", "type": "integer", "context": [ "view", "edit" ], "readonly": true }, "description": { "description": "HTML описание элемента.", "type": "string", "context": [ "view", "edit" ] }, "link": { "description": "URL элемента.", "type": "string", "format": "uri", "context": [ "view", "embed", "edit" ], "readonly": true }, "name": { "description": "HTML название элемента.", "type": "string", "context": [ "view", "embed", "edit" ], "required": true }, "slug": { "description": "Буквенно-цифровой идентификатор элемента уникальный для его типа.", "type": "string", "context": [ "view", "embed", "edit" ] }, "taxonomy": { "description": "Тип атрибуции элемента.", "type": "string", "enum": [ "category", "post_tag", "nav_menu", "link_category", "post_format" ], "context": [ "view", "embed", "edit" ], "readonly": true }, "parent": { "description": "ID элемента родителя.", "type": "integer", "context": [ "view", "edit" ] }, "meta": { "description": "Мета поля.", "type": "object", "context": [ "view", "edit" ], "properties": [] } } } }
меню
Получение категории
Алгоритм схож с работой функции get_category().
Вид запроса
GET /wp/v2/categories/{id}
Параметры запроса
- id(число)
- Идентификатор термина.
- context(строка)
- Область, в которой выполняется запрос; определяет поля, присутствующие в ответе.
Может быть: view, embed, edit
По умолчанию: view
Пример запроса
http://demo.wp-api.org/wp-json/wp/v2/categories/25
Обновление категории
Алгоритм схож с работой функции wp_update_category()
Вид запроса
POST /wp/v2/categories/{id}
Параметры запроса
- id(обязательный)
- ID термина (рубрики).
- name
- Название термина (рубрики).
- description
- Описание термина (рубрики).
- slug
- Слаг (ярлык) термина (рубрики), обычно создается из названия.
- parent
- ID родительского термина.
- meta
- Мета поля.
Пример запроса
$ curl -X POST http://demo.wp-api.org/wp-json/wp/v2/categories/25 -d '{"name":"Новое имя"}'
Или
POST http://wptest.ru/wp-json/wp/v2/categories/6?name=My rubrik&slug=My rubrik
Ответ
{ "id": 6, "count": 0, "description": "", "link": "http://wptest.ru/cat/my-rubrik/", "name": "My rubrik", "slug": "my-rubrik", "taxonomy": "category", "parent": 0, "meta": [], "_links": { "self": [ { "href": "http://wptest.ru/wp-json/wp/v2/categories/6" } ], "collection": [ { "href": "http://wptest.ru/wp-json/wp/v2/categories" } ], "about": [ { "href": "http://wptest.ru/wp-json/wp/v2/taxonomies/category" } ], "wp:post_type": [ { "href": "http://wptest.ru/wp-json/wp/v2/posts?categories=6" } ], "curies": [ { "name": "wp", "href": "https://api.w.org/{rel}", "templated": true } ] } }
меню
Удаление категории
Алгоритм схож с работой функции wp_delete_term()
Вид запроса
DELETE /wp/v2/categories/{id}
Параметры запроса
- id(обязательный)
- ID термина (рубрики).
- force
- Всегда должен быть true, так как термины не поддерживают корзину.
Пример запроса
$ curl -X DELETE http://wptest.ru/wp-json/wp/v2/categories/6?force=true
Ответ
{ "deleted": true, "previous": { "id": 6, "count": 0, "description": "", "link": "http://wptest.ru/cat/my-rubrik/", "name": "My rubrik", "slug": "my-rubrik", "taxonomy": "category", "parent": 0, "meta": [] } }
Ответ если такой рубрики нет
{ "code": "rest_term_invalid", "message": "Элемент не существует.", "data": { "status": 404 } }
Медиа (media) — (REST API → Маршруты WP из коробки)
Эти маршруты позволяют получить/создать/обновить/удалить вложение (медиа).
Возможные маршруты (конечные точки маршрутов описаны ниже):
/wp/v2/media // работает со всеми вложениями /wp/v2/media/{ID} // работает с указанной вместо {ID} вложением /wp/v2/media/{ID}/post-process /wp/v2/media/{ID}/edit
Класс контроллера: WP_REST_Attachments_Controller{} extends WP_REST_Posts_Controller{}.
Схема ресурса
Схема показывает все поля, которые существуют для объекта запись: поля объекта которые вернет запрос.
Параметр | Контекст | Описание |
---|---|---|
date Строка/null | view, edit, embed | Дата публикации объекта, по временной зоне сайта. |
date_gmt Строка/null | view, edit | Время публикации объекта, по GMT. |
guid Объект readonly | view, edit | Глобальный уникальный идентификатор для объекта. |
id Число readonly | view, edit, embed | Уникальный идентификатор для объекта. |
link Строка readonly | view, edit, embed | URL объекта. |
modified Строка readonly | view, edit | Дата последнего изменения объекта, по временной зоне сайта. |
modified_gmt Строка readonly | view, edit | Дата последнего изменения объекта, в GMT. |
slug Строка | view, edit, embed | Буквенно-цифровой идентификатор для объекта уникальный для его типа. |
status Строка | view, edit | Именованный статус для объекта. |
type Строка readonly | view, edit, embed | Тип записи для объекта. |
permalink_template Строка readonly | edit | Шаблон постоянных ссылок для объекта. |
generated_slug Строка readonly | edit | Ярлык автоматически создан из заголовка объекта. |
title Объект | view, edit, embed | Название для объекта. |
author Число | view, edit, embed | ID автора объекта. |
comment_status Строка | view, edit | Открыты ли комментарии для объекта. |
ping_status Строка | view, edit | Принимает ли объект уведомления. |
meta Объект | view, edit | Мета поля. |
template Строка | view, edit | Файл темы используемый для показа объекта. |
alt_text Строка | view, edit, embed | Альтернативный текст для показа когда вложение не отображается. |
caption Объект | view, edit, embed | Подпись вложения. |
description Объект | view, edit | Описание вложения. |
media_type Строка readonly | view, edit, embed | Тип вложения. |
mime_type Строка readonly | view, edit, embed | MIME тип вложения. |
media_details Объект readonly | view, edit, embed | Подробности о медиа файле, специфичные его типу. |
post Число | view, edit | ID для ассоциированых записей для вложения. |
source_url Строка readonly | view, edit, embed | URL оригинала файла вложения. |
missing_image_sizes Массив readonly | edit | Список отсутствующих размеров изображений для вложения. |
меню
wp/v2/media
Запрос OPTIONS к маршруту вернет полное описание этого маршрута: эндпоинты их параметры, схему.
$ curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/media
{ "namespace": "wp/v2", "methods": [ "GET", "POST" ], "endpoints": [ { "methods": [ "GET" ], "args": { "context": { "required": false, "default": "view", "enum": [ "view", "embed", "edit" ], "description": "Рамки в которых сделан запрос, определяют поля в ответе.", "type": "string" }, "page": { "required": false, "default": 1, "description": "Текущая страница коллекции.", "type": "integer" }, "per_page": { "required": false, "default": 10, "description": "Максимальное число объектов возвращаемое в выборке.", "type": "integer" }, "search": { "required": false, "description": "Ограничить результаты до совпадающих со строкой.", "type": "string" }, "after": { "required": false, "description": "Ограничить ответ записями опубликованными после заданной ISO8601 совместимой даты. ", "type": "string" }, "author": { "required": false, "default": [], "description": "Ограничить выборку записями определенных авторов.", "type": "array", "items": { "type": "integer" } }, "author_exclude": { "required": false, "default": [], "description": "Убедиться что выборка исключает записи назначенные определенным авторам.", "type": "array", "items": { "type": "integer" } }, "before": { "required": false, "description": "Ограничить ответ записями опубликованными до заданной ISO8601 совместимой даты.", "type": "string" }, "exclude": { "required": false, "default": [], "description": "Убедиться что выборка исключает определенные ID.", "type": "array", "items": { "type": "integer" } }, "include": { "required": false, "default": [], "description": "Ограничить выборку до определенных ID.", "type": "array", "items": { "type": "integer" } }, "offset": { "required": false, "description": "Сдвиг выборки на определенное число объектов.", "type": "integer" }, "order": { "required": false, "default": "desc", "enum": [ "asc", "desc" ], "description": "Упорядочить сортировку атрибута по возрастанию или убыванию.", "type": "string" }, "orderby": { "required": false, "default": "date", "enum": [ "author", "date", "id", "include", "modified", "parent", "relevance", "slug", "include_slugs", "title" ], "description": "Сортировать коллекцию по атрибуту объекта.", "type": "string" }, "parent": { "required": false, "default": [], "description": "Ограничить выборку до определенных ID родителей.", "type": "array", "items": { "type": "integer" } }, "parent_exclude": { "required": false, "default": [], "description": "Ограничить выборку до объектов за исключением имеющих определенный ID родителя.", "type": "array", "items": { "type": "integer" } }, "slug": { "required": false, "description": "Ограничить выборку до записей с одним или несколькими установленными конкретными ярлыками.", "type": "array", "items": { "type": "string" } }, "status": { "required": false, "default": "inherit", "description": "Ограничить выборку до записей с одним или несколькими установленными статусами.", "type": "array", "items": { "enum": [ "inherit", "private", "trash" ], "type": "string" } }, "media_type": { "required": false, "enum": [ "image", "video", "text", "application", "audio" ], "description": "Ограничить выборку до вложений определенного типа медиа.", "type": "string" }, "mime_type": { "required": false, "description": "Ограничить выборку до вложений определенного MIME типа.", "type": "string" } } }, { "methods": [ "POST" ], "args": { "date": { "required": false, "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string" }, "date_gmt": { "required": false, "description": "Время публикации объекта, по GMT.", "type": "string" }, "slug": { "required": false, "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа.", "type": "string" }, "status": { "required": false, "enum": [ "publish", "future", "draft", "pending", "private" ], "description": "Именованный статус для объекта.", "type": "string" }, "title": { "required": false, "description": "Название для объекта.", "type": "object" }, "author": { "required": false, "description": "ID автора объекта.", "type": "integer" }, "comment_status": { "required": false, "enum": [ "open", "closed" ], "description": "Открыты ли комментарии для объекта.", "type": "string" }, "ping_status": { "required": false, "enum": [ "open", "closed" ], "description": "Принимает ли объект уведомления.", "type": "string" }, "meta": { "required": false, "description": "Мета поля.", "type": "object" }, "template": { "required": false, "description": "Файл темы используемый для показа объекта.", "type": "string" }, "alt_text": { "required": false, "description": "Альтернативный текст для показа когда вложение не отображается.", "type": "string" }, "caption": { "required": false, "description": "Подпись вложения.", "type": "object" }, "description": { "required": false, "description": "Описание вложения.", "type": "object" }, "post": { "required": false, "description": "ID для ассоциированых записей для вложения.", "type": "integer" } } } ], "schema": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "attachment", "type": "object", "properties": { "date": { "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit", "embed" ] }, "date_gmt": { "description": "Время публикации объекта, по GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ] }, "guid": { "description": "Глобальный уникальный идентификатор для объекта.", "type": "object", "context": [ "view", "edit" ], "readonly": true, "properties": { "raw": { "description": "GUID для объекта, как он существует в базе данных.", "type": "string", "context": [ "edit" ], "readonly": true }, "rendered": { "description": "GUID для объекта, преобразованный для показа.", "type": "string", "context": [ "view", "edit" ], "readonly": true } } }, "id": { "description": "Уникальный идентификатор для объекта.", "type": "integer", "context": [ "view", "edit", "embed" ], "readonly": true }, "link": { "description": "URL объекта.", "type": "string", "format": "uri", "context": [ "view", "edit", "embed" ], "readonly": true }, "modified": { "description": "Дата последнего изменения объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "modified_gmt": { "description": "Дата последнего изменения объекта, в GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "slug": { "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа.", "type": "string", "context": [ "view", "edit", "embed" ] }, "status": { "description": "Именованный статус для объекта.", "type": "string", "enum": [ "publish", "future", "draft", "pending", "private" ], "context": [ "view", "edit" ] }, "type": { "description": "Тип записи для объекта.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "title": { "description": "Название для объекта.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Название объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML название объекта, преобразованное для показа.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "author": { "description": "ID автора объекта.", "type": "integer", "context": [ "view", "edit", "embed" ] }, "comment_status": { "description": "Открыты ли комментарии для объекта.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "ping_status": { "description": "Принимает ли объект уведомления.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "meta": { "description": "Мета поля.", "type": "object", "context": [ "view", "edit" ], "properties": [] }, "template": { "description": "Файл темы используемый для показа объекта.", "type": "string", "context": [ "view", "edit" ] }, "alt_text": { "description": "Альтернативный текст для показа когда вложение не отображается.", "type": "string", "context": [ "view", "edit", "embed" ] }, "caption": { "description": "Подпись вложения.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Подпись для вложения, как она существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML подпись для вложения, преобразованная для показа.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "description": { "description": "Описание вложения.", "type": "object", "context": [ "view", "edit" ], "properties": { "raw": { "description": "Описание для объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML описание для объекта преобразованное для показа.", "type": "string", "context": [ "view", "edit" ], "readonly": true } } }, "media_type": { "description": "Тип вложения.", "type": "string", "enum": [ "image", "file" ], "context": [ "view", "edit", "embed" ], "readonly": true }, "mime_type": { "description": "MIME тип вложения.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "media_details": { "description": "Подробности о медиа файле, специфичные его типу.", "type": "object", "context": [ "view", "edit", "embed" ], "readonly": true }, "post": { "description": "ID для ассоциированых записей для вложения.", "type": "integer", "context": [ "view", "edit" ] }, "source_url": { "description": "URL оригинала файла вложения.", "type": "string", "format": "uri", "context": [ "view", "edit", "embed" ], "readonly": true } }, "links": [ { "rel": "https://api.w.org/action-assign-author", "title": "Текущий пользователь может сменить автора для этой записи.", "href": "http://wp-test.ru/wp-json/wp/v2/media/{id}", "targetSchema": { "type": "object", "properties": { "author": { "type": "integer" } } } } ] }, "_links": { "self": "http://wp-test.ru/wp-json/wp/v2/media" } }
меню
Список всех вложений
Алгоритм схож с работой функции get_posts(), где для каждого объекта вложения добавлены специфические свойства.
Вид запроса
Доступ: публичный
GET /wp/v2/media
Параметры запроса
- context
- Область, в которой выполняется запрос; определяет поля, присутствующие в ответе. Может быть view, embed, edit.
По умолчанию: view - page
- Текущая страница коллекции.
По умолчанию: 1 - per_page
- Максимальное количество вложений в результирующем наборе.
По умолчанию: 10 - search
- Ограничение по количеству возвращаемых записей при поиске.
- after
- Ограничить ответ по вложениям, опубликованных после заданной даты, соответствующей ISO8601.
- before
- Ограничить ответ по вложениям, опубликованных до заданной даты, соответствующей ISO8601.
- exclude
- Исключает из набора вложения по их ID.
- include
- Включает в набор вложения по их ID. В наборе будут присутствовать только те вложения, ID которых были указаны.
- offset
- Смещение (отступ) набора результатов на указанное число.
По умолчанию: 1 - order
- Сортировка вложений в выборке. Может быть asc или desc.
По умолчанию: desc - orderby
- Сортировка записей в выборке по атрибутам. Может быть author, date, id, include, modified, parent, relevance, slug, title.
По умолчанию: date - parent
- Ограничить выборку до определенных ID родителей.
- parent_exclude
- Ограничить выборку до объектов за исключением имеющих определенный ID родителя.
- slug
- Ограничение выборки по указанному одному ярлыку вложения или нескольким.
- status
- Ограничение выборки по одному статусу или нескольким.
По умолчанию: inherit - media_type
- Ограничить выборку до вложений определенного типа медиа. Может быть: image, video, audio, application
- mime_type
- Ограничить выборку до вложений определенного MIME типа.
Пример запроса
$ curl http://demo.wp-api.org/wp-json/wp/v2/media
Вернется массив объектов, где каждый объект вложения схож с тем, что описан в пункте «Получить вложение»:
[ { ... данные вложения <id> ... }, { ... данные вложения <id> ... }, { ... данные вложения <id> ... } ]
меню
Создание вложения
Создает медиа файл. Алгоритм похож на работу функции wp_insert_attachment().
Вид запроса
Доступ: нужна авторизация
POST /wp/v2/media
Параметры запроса
- date(строка)
- Дата публикации объекта, по временной зоне сайта.
- date_gmt(строка)
- Время публикации объекта, по GMT.
- slug(строка)
- Буквенно-цифровой идентификатор для объекта уникальный для его типа.
- status(строка)
- Именованный статус для объекта. Возможные значения: publish, future, draft, pending, private.
- title(объект)
- Название для объекта.
- author(число)
- ID автора объекта.
- comment_status(строка)
- Открыты ли комментарии для объекта. Возможные значения: open, closed.
- ping_status(строка)
- Принимает ли объект уведомления. Возможные значения: open, closed.
- meta(объект)
- Мета поля.
- template(строка)
- Файл темы используемый для показа объекта.
- alt_text(строка)
- Альтернативный текст для показа когда вложение не отображается.
- caption(объект)
- Подпись вложения.
- description(объект)
- Описание вложения.
- post(число)
- ID для ассоциированных записей для вложения.
Пример запроса
$ curl -X POST http://demo.wp-api.org/wp-json/wp/v2/media
меню
wp/v2/media/{id}
Запрос OPTIONS к маршруту вернет полное описание этого маршрута: эндпоинты их параметры, схему.
$ curl -X OPTIONS -i http://demo.wp-api.org/wp-json/wp/v2/media/{id}
{ "namespace": "wp/v2", "methods": [ "GET", "POST", "PUT", "PATCH", "DELETE" ], "endpoints": [ { "methods": [ "GET" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "context": { "required": false, "default": "view", "enum": [ "view", "embed", "edit" ], "description": "Рамки в которых сделан запрос, определяют поля в ответе.", "type": "string" } } }, { "methods": [ "POST", "PUT", "PATCH" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "date": { "required": false, "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string" }, "date_gmt": { "required": false, "description": "Время публикации объекта, по GMT.", "type": "string" }, "slug": { "required": false, "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа.", "type": "string" }, "status": { "required": false, "enum": [ "publish", "future", "draft", "pending", "private" ], "description": "Именованный статус для объекта.", "type": "string" }, "title": { "required": false, "description": "Название для объекта.", "type": "object" }, "author": { "required": false, "description": "ID автора объекта.", "type": "integer" }, "comment_status": { "required": false, "enum": [ "open", "closed" ], "description": "Открыты ли комментарии для объекта.", "type": "string" }, "ping_status": { "required": false, "enum": [ "open", "closed" ], "description": "Принимает ли объект уведомления.", "type": "string" }, "meta": { "required": false, "description": "Мета поля.", "type": "object" }, "template": { "required": false, "description": "Файл темы используемый для показа объекта.", "type": "string" }, "alt_text": { "required": false, "description": "Альтернативный текст для показа когда вложение не отображается.", "type": "string" }, "caption": { "required": false, "description": "Подпись вложения.", "type": "object" }, "description": { "required": false, "description": "Описание вложения.", "type": "object" }, "post": { "required": false, "description": "ID для ассоциированых записей для вложения.", "type": "integer" } } }, { "methods": [ "DELETE" ], "args": { "id": { "required": false, "description": "Уникальный идентификатор для объекта.", "type": "integer" }, "force": { "required": false, "default": false, "description": "Игнорировать ли перемещение в корзину и принудительно удалять.", "type": "boolean" } } } ], "schema": { "$schema": "http://json-schema.org/draft-04/schema#", "title": "attachment", "type": "object", "properties": { "date": { "description": "Дата публикации объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit", "embed" ] }, "date_gmt": { "description": "Время публикации объекта, по GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ] }, "guid": { "description": "Глобальный уникальный идентификатор для объекта.", "type": "object", "context": [ "view", "edit" ], "readonly": true, "properties": { "raw": { "description": "GUID для объекта, как он существует в базе данных.", "type": "string", "context": [ "edit" ], "readonly": true }, "rendered": { "description": "GUID для объекта, преобразованный для показа.", "type": "string", "context": [ "view", "edit" ], "readonly": true } } }, "id": { "description": "Уникальный идентификатор для объекта.", "type": "integer", "context": [ "view", "edit", "embed" ], "readonly": true }, "link": { "description": "URL объекта.", "type": "string", "format": "uri", "context": [ "view", "edit", "embed" ], "readonly": true }, "modified": { "description": "Дата последнего изменения объекта, по временной зоне сайта.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "modified_gmt": { "description": "Дата последнего изменения объекта, в GMT.", "type": "string", "format": "date-time", "context": [ "view", "edit" ], "readonly": true }, "slug": { "description": "Буквенно-цифровой идентификатор для объекта уникальный для его типа.", "type": "string", "context": [ "view", "edit", "embed" ] }, "status": { "description": "Именованный статус для объекта.", "type": "string", "enum": [ "publish", "future", "draft", "pending", "private" ], "context": [ "view", "edit" ] }, "type": { "description": "Тип записи для объекта.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "title": { "description": "Название для объекта.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Название объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML название объекта, преобразованное для показа.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "author": { "description": "ID автора объекта.", "type": "integer", "context": [ "view", "edit", "embed" ] }, "comment_status": { "description": "Открыты ли комментарии для объекта.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "ping_status": { "description": "Принимает ли объект уведомления.", "type": "string", "enum": [ "open", "closed" ], "context": [ "view", "edit" ] }, "meta": { "description": "Мета поля.", "type": "object", "context": [ "view", "edit" ], "properties": [] }, "template": { "description": "Файл темы используемый для показа объекта.", "type": "string", "context": [ "view", "edit" ] }, "alt_text": { "description": "Альтернативный текст для показа когда вложение не отображается.", "type": "string", "context": [ "view", "edit", "embed" ] }, "caption": { "description": "Подпись вложения.", "type": "object", "context": [ "view", "edit", "embed" ], "properties": { "raw": { "description": "Подпись для вложения, как она существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML подпись для вложения, преобразованная для показа.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true } } }, "description": { "description": "Описание вложения.", "type": "object", "context": [ "view", "edit" ], "properties": { "raw": { "description": "Описание для объекта как оно существует в базе данных.", "type": "string", "context": [ "edit" ] }, "rendered": { "description": "HTML описание для объекта преобразованное для показа.", "type": "string", "context": [ "view", "edit" ], "readonly": true } } }, "media_type": { "description": "Тип вложения.", "type": "string", "enum": [ "image", "file" ], "context": [ "view", "edit", "embed" ], "readonly": true }, "mime_type": { "description": "MIME тип вложения.", "type": "string", "context": [ "view", "edit", "embed" ], "readonly": true }, "media_details": { "description": "Подробности о медиа файле, специфичные его типу.", "type": "object", "context": [ "view", "edit", "embed" ], "readonly": true }, "post": { "description": "ID для ассоциированых записей для вложения.", "type": "integer", "context": [ "view", "edit" ] }, "source_url": { "description": "URL оригинала файла вложения.", "type": "string", "format": "uri", "context": [ "view", "edit", "embed" ], "readonly": true } }, "links": [ { "rel": "https://api.w.org/action-assign-author", "title": "Текущий пользователь может сменить автора для этой записи.", "href": "http://wp-test.ru/wp-json/wp/v2/media/{id}", "targetSchema": { "type": "object", "properties": { "author": { "type": "integer" } } } } ] } }
меню
Получение вложения
Вид запроса
Доступ: публичный
GET /wp/v2/media/{id}
Параметры запроса
- id (обязательный)
- Уникальный идентификатор вложения. Этот же параметр указывается в маршруте.
- context
- Область, в которой выполняется запрос; определяет поля, присутствующие в ответе. Может быть view, embed, edit.
По умолчанию: view
Пример запроса
Запросим вложение с ID = 411:
$ curl http://demo.wp-api.org/wp-json/wp/v2/media/411
Результат:
{ "id": 411, "date": "2018-06-10T17:41:48", "date_gmt": "2018-06-10T14:41:48", "guid": { "rendered": "http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg" }, "modified": "2018-06-10T17:41:48", "modified_gmt": "2018-06-10T14:41:48", "slug": "cropped-jellyfish-jpg", "status": "inherit", "type": "attachment", "link": "http://wp-test.ru/cropped-jellyfish-jpg/", "title": { "rendered": "cropped-Jellyfish.jpg" }, "author": 1, "comment_status": "open", "ping_status": "closed", "template": "", "meta": [], "description": { "rendered": "<p class=\"attachment\"><a href='http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg'><img width=\"250\" height=\"250\" src=\"http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg\" class=\"attachment-medium size-medium\" alt=\"\" srcset=\"http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg 250w, http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish-100x100.jpg 100w, http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish-150x150.jpg 150w\" sizes=\"100vw\" /></a></p>\n<p>http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg</p>\n" }, "caption": { "rendered": "<p>http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg</p>\n" }, "alt_text": "", "media_type": "image", "mime_type": "image/jpeg", "media_details": { "width": 250, "height": 250, "file": "2018/03/cropped-Jellyfish.jpg", "sizes": { "woocommerce_gallery_thumbnail": { "file": "cropped-Jellyfish-100x100.jpg", "width": 100, "height": 100, "mime_type": "image/jpeg", "source_url": "http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish-100x100.jpg" }, "thumbnail": { "file": "cropped-Jellyfish-150x150.jpg", "width": 150, "height": 150, "mime_type": "image/jpeg", "source_url": "http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish-150x150.jpg" }, "twentyseventeen-thumbnail-avatar": { "file": "cropped-Jellyfish-100x100.jpg", "width": 100, "height": 100, "mime_type": "image/jpeg", "source_url": "http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish-100x100.jpg" }, "full": { "file": "cropped-Jellyfish.jpg", "width": 250, "height": 250, "mime_type": "image/jpeg", "source_url": "http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg" } }, "image_meta": { "aperture": "0", "credit": "", "camera": "", "caption": "", "created_timestamp": "0", "copyright": "", "focal_length": "0", "iso": "0", "shutter_speed": "0", "title": "", "orientation": "0", "keywords": [] } }, "post": null, "source_url": "http://wp-test.ru/wp-content/uploads/2018/03/cropped-Jellyfish.jpg", "_links": { "self": [ { "attributes": [], "href": "http://wp-test.ru/wp-json/wp/v2/media/411" } ], "collection": [ { "attributes": [], "href": "http://wp-test.ru/wp-json/wp/v2/media" } ], "about": [ { "attributes": [], "href": "http://wp-test.ru/wp-json/wp/v2/types/attachment" } ], "author": [ { "attributes": { "embeddable": true }, "href": "http://wp-test.ru/wp-json/wp/v2/users/1" } ], "replies": [ { "attributes": { "embeddable": true }, "href": "http://wp-test.ru/wp-json/wp/v2/comments?post=411" } ] } }
меню
Обновление вложения
Алгоритм похож на работу функции wp_update_post()
Вид запроса
Доступ: нужна авторизация
POST|PUT|PATCH /wp/v2/media/{id}
Параметры запроса
Смотрите параметры при создании вложения.
Пример запроса
$ curl -X POST http://demo.wp-api.org/wp-json/wp/v2/media/25?caption=Новая подпись
Удаление вложения
Алгоритм похож на работу функции wp_delete_attachment().
Вид запроса
Доступ: нужна авторизация
DELETE /wp/v2/media/{id}
Параметры запроса
- force(true/false)
- Игнорировать ли перемещение в корзину и принудительно удалять.
По умолчанию: false
Пример запроса
Удалим вложение 25:
$ curl -X DELETE http://demo.wp-api.org/wp-json/wp/v2/media/25
/wp/v2/media/{ID}/post-process
Последующая обработка вложения.
Вид запроса
Доступ: нужна авторизация.
POST /wp/v2/media/{ID}/post-process
Параметры запроса
- $action(строка) (обязательный)
- Какую обработку нужно сделать. Возможные значения:
create-image-subsizes
.
/wp/v2/media/{ID}/edit
Редактирование.
Вид запроса
Доступ: нужна авторизация.
POST /wp/v2/media/{ID}/edit
Параметры запроса
- $src(строка) (обязательный)
- URL отредактированного файла изображения.
- $rotation(число)
- Величина (в градусах, от от 0 до 360) для поворота изображения по часовой стрелке.
- $x(число)
- В процентах от изображения, позиция X для начала обрезки. Возможные значения: 0 — 100.
- $y(число)
- В процентах от изображения, позиция Y для начала обрезки. Возможные значения: 0 — 100.
- $width(число)
- В процентах от изображения, ширина для обрезки изображения.
- $height(число)
- В процентах от изображения, высота для обрезки изображения.
WordPress JsonAPI — /wp-json/ не был найден на этом сервере
Я использую следующий плагин Json Rest API .
Чтобы протестировать плагин в документации говорится, что я должен просто использовать:
$ curl -i http://testpress-maxximus.rhcloud.com/wp-json/
HTTP/1.1 404 Not Found
Date: Sat, 24 May 2014 07:01:21 GMT
Server: Apache/2.2.15 (Red Hat)
Content-Length: 303
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h2>Not Found</h2>
<p>The requested URL /wp-json/ was not found on this server.</p>
<hr>
<address>Apache/2.2.15 (Red Hat) Server at testpress-maxximus.rhcloud.com Port 8
0</address>
</body></html>
Как вы можете видеть, ничего не найдено URL. Есть какие-нибудь рекомендации, если есть проблема с API или wordpress?
Я ценю ваш ответ
json
wordpress
openshift
Поделиться
Источник
Anna.Klee
24 мая 2014 в 07:04
8 ответов
- OpenShift-запрошенный URL /app не был найден на этом сервере
Я использую сервер OpenShift и пытаюсь настроить свой недавно приобретенный пользовательский домен. Он указывает на OpenShift CNAME, но когда я пытаюсь получить доступ к своему сайту (WordPress), я получаю следующую ошибку: не найдено Запрошенный URL /app не был найден на этом сервере. Сервер…
- WordPress: запрошенный URL /myPost/ не был найден на этом сервере
Я установил wordpress и настроил, и я написал сообщение и опубликовал сообщение, но я получаю эту ошибку: Запрошенный URL /myPost/ не был найден на этом сервере. Я изменяю свой файл httpd.conf и добавляю: <Directory /> Options FollowSymLinks AllowOverride All </Directory> и я также…
48
Текущая версия REST api для сайтов с довольно постоянными ссылками не включена, url
yoursite.com/?rest_route=/
будет работать .
Поделиться
Anoop D
30 января 2017 в 09:42
Поделиться
Eric Andrew Lewis
30 ноября 2014 в 18:50
15
В моем случае я получил эту ошибку после установки/настройки apache2 на моей локальной машине linux. Наконец я обнаружил, что ошибка вызвана тем, что модуль перезаписи не включен, который я исправил с помощью,
sudo a2enmod rewrite
а также обеспечение того, чтобы мой файл apache2.conf (расположенный в папке /etc/apache2)) имел директиву <Directory>
‘AllowOverride’, установленную для всех, а не ни для кого, из
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
до
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
, затем я перезапустил службу apache2, и проблема была решена.
Поделиться
Aurovrata
09 октября 2018 в 10:56
- Wordpress REST API (wp-api) 404 ошибка
Я уже несколько месяцев использую плагин WordPress REST WP-API, разрабатывая его локально с помощью XAMPP. Недавно я перенес свой сайт на экземпляр EC2, и все работает нормально, за исключением того, что теперь я получаю 404 со следующим сообщением всякий раз, когда пытаюсь получить доступ к любой…
- Проблема AWS: запрошенный URL не был найден на этом сервере
Это первый раз, когда я использую AWS, и я успешно создал экземпляр: Экземпляр предназначен для размещения установки wordpress, я установил wordpress через PuTTY и изменил конфигурационный файл. экземпляр AWS запущен, но почему возникают следующие проблемы: 1. Когда я набрал IP (эластичный IP),…
11
Я сталкивался с этой проблемой несколько раз . Решение заключается в следующем :
Войдите на свой сайт WordPress: example.com/wp-admin
Затем нажмите на настройки
Затем нажмите на постоянные ссылки
Затем установите постоянные ссылки на » post-name »
сохранить изменения
Поделиться
Daggie Blanqx — Douglas Mwangi
26 декабря 2018 в 09:00
5
Иногда решение бывает сумасшедшим и простым! Перейдите к настройкам постоянной ссылки, перейдя к Admin -> Settings -> Permalinks
…тогда просто нажмите Save Changes
, ничего больше не делая! Это освежает память о WordPress.
Почему это? Для ситуации, которая у меня была раньше, я изменил основной сайт URL, так что мне пришлось обновить и постоянные ссылки.
Поделиться
Mohammad AlBanna
07 августа 2019 в 22:30
2
Я запускал WP в локальной среде разработки в поддомене localhost (например, mysite.localhost:8888)
Решение для меня состояло в том, чтобы обновить конфигурацию виртуального хоста в httpd-vhosts.conf, чтобы установить параметры каталога, аналогично ответу Ауроврата:
<VirtualHost *:8888>
ServerName mysite.localhost
DocumentRoot "/Users/myusername/mysite"
<Directory /Users/myusername/mysite>
Options Indexes FollowSymLinks
AllowOverride All
</Directory>
</VirtualHost>
Поделиться
JMac
18 июля 2019 в 08:45
1
У меня была такая же проблема, и я хотел опубликовать свое решение на случай, если кто-то еще столкнется с этим ответом, а другие ответы не решат проблему, как это произошло со мной.index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Это решило проблему для меня. В соответствии с документацией :
WordPress использует этот файл для управления тем, как Apache обслуживает файлы из
своего корневого каталога и его подкаталогов. В частности, WP
изменяет этот файл, чтобы иметь возможность обрабатывать довольно постоянные ссылки.
Поделиться
logos_164
16 октября 2019 в 01:41
0
Если вы правильно установили плагин, обязательно очистите правила перезаписи.
Это может быть достигнуто с помощью wp-cli: http://wp-cli.org/commands/rewrite/flush/
Поделиться
Austin Pray
29 декабря 2015 в 22:30
Похожие вопросы:
Кроме домашней страницы, запрошенный URL не был найден на этом сервере (AWS EC2 wordpress)
Я размещаю два wordpress на AWS EC2 (скажем, site1 и site2 ). site1 работает отлично, но site2 может получить доступ только к домашней странице для других страниц, столкнувшись со следующей ошибкой:…
не удалось установить wordpress столкнувшись с ошибкой запрошенный URL / не был найден на этом сервере
нужна помощь плз после получения бесплатного домена, хоста от googiehost и использования filezila соединение было успешно установлено с серверами googie host Я скопировал все файлы папки wordpress…
WordPress: запрошенный URL /index.php не был найден на этом сервере
Я работаю над проектом WordPress с двумя языками в общей папке. У меня есть две папки. Первая папка-ar по этой ссылке: http://www.gilenmobilya.com/АР / А вторая папка-tr:…
OpenShift-запрошенный URL /app не был найден на этом сервере
Я использую сервер OpenShift и пытаюсь настроить свой недавно приобретенный пользовательский домен. Он указывает на OpenShift CNAME, но когда я пытаюсь получить доступ к своему сайту (WordPress), я…
WordPress: запрошенный URL /myPost/ не был найден на этом сервере
Я установил wordpress и настроил, и я написал сообщение и опубликовал сообщение, но я получаю эту ошибку: Запрошенный URL /myPost/ не был найден на этом сервере. Я изменяю свой файл httpd.conf и…
WordPress REST API (wp-api) 404 ошибка
Я уже несколько месяцев использую плагин WordPress REST WP-API, разрабатывая его локально с помощью XAMPP. Недавно я перенес свой сайт на экземпляр EC2, и все работает нормально, за исключением…
Проблема AWS: запрошенный URL не был найден на этом сервере
Это первый раз, когда я использую AWS, и я успешно создал экземпляр: Экземпляр предназначен для размещения установки wordpress, я установил wordpress через PuTTY и изменил конфигурационный файл….
Запрошенный URL /login не был найден на этом сервере
Я пытаюсь Настроить локальную среду WP на своей машине. Мой файл .htaccess (который находится в той же папке, что и мой файл index.php) выглядит следующим образом: # BEGIN WordPress <IfModule…
centos wordpress запрошенный URL не был найден на этом сервере,
Я пытаюсь разместить свой проект wordpress в centos удаленно, я разместил его на /var/www/html и дал разрешение 777 на все подпапки и файлы, а также изменения и в файле .httpd я изменил на все…
Wordrpress wp-json не найден на сервере — localhost
Вот в чем дело: Я скачал и установил Wampserver64 и WordPress 5.2.3 Я наконец-то добрался до своего сайта, но я не могу просматривать или публиковать страницы с новым редактором Gutenberg или block,…
WordPress REST API (wp-api) 404 ошибка
Я уже несколько месяцев использую плагин WordPress REST WP-API, разрабатывая его локально с помощью XAMPP. Недавно я перенес свой сайт на экземпляр EC2, и все работает нормально, за исключением того, что теперь я получаю 404 со следующим сообщением всякий раз, когда пытаюсь получить доступ к любой конечной точке на API:
Запрошенный URL /wordpress/wp-json/ не был найден на этом сервере
Довольно постоянные ссылки включены со следующей структурой http://.../wordpress/sample-post/
, которая отлично работает при переходе к определенному сообщению в браузере.
Вот некоторые подробности о моей настройке:
- WordPress 4.4.1
- Не Мультисайт
- WP REST API плагин 2.0-beta9
- Apache 2.2.22
- Ubuntu 12.04.5
Любая помощь была бы очень признательна, так как я прошел через SO и форумы поддержки WP в течение нескольких часов и у меня закончились идеи. Спасибо!
wordpress
wp-api
wordpress-rest-api
Поделиться
Источник
dsal1951
08 января 2016 в 06:08
10 ответов
- Запрос Нескольких Типов Сообщений С Использованием WP REST API V2 (WordPress)
В прошлом я использовал WordPress REST API версии 1 (V1) на нескольких сайтах. Одной из функций, которую я широко использовал, была возможность вызывать несколько типов сообщений в одном запросе. В WP REST API версии 1 я смог использовать следующую конечную точку, чтобы получить список, содержащий…
- Безопасно отключить WP REST API
Я подумываю о том, чтобы улучшить безопасность моего сайта WordPress, и при этом столкнулся с тем, что WP REST API включен по умолчанию (начиная с WP 4.4, если я не ошибаюсь). Каков безопасный способ отключить его? Под safe здесь я подразумеваю, что он не вызывает неожиданных побочных эффектов,…
136
ОБНОВЛЕННЫЙ НОВЫЙ СПОСОБ
Я также столкнулся с подобной проблемой в местном проекте. Я использовал index.php
после моего проекта url, и это сработало.
http://localhost/myproject/index.php/wp-json/wp/v2/posts
Если он отображает ошибку 404, сначала обновите постоянные ссылки (см. раздел «Paged Navigation Doesn’t Work»
Если это работает, возможно , вам нужно включить mod_rewrite
, на ubuntu:
a2enmod rewrite
sudo service apache2 restart
Установка
REST API входит в WordPress 4.7! Плагины больше не требуются, просто установите последнюю версию WordPress, и вы готовы к работе.
Если вы до 4.7:
Скачать плагин можно здесь: http://v2.wp-api.org/
установите и активируйте его.
Использование
Чтобы получить все сообщения:
www.mysite.com/wp-json/wp/v2/posts
Для функции поиска поиск тестового сообщения выглядит следующим образом:
/wp-json/wp/v2/posts?filter[s]=test
Поделиться
Jitendra Popat
12 января 2016 в 12:24
33
У меня была эта проблема с последней версией WordPress 4.7+. В моем случае REST API работал только после того, как я изменил настройку постоянных ссылок на что-то другое, чем «Plain», что было настройкой по умолчанию для моей установки.
Поделиться
dlaub3
20 сентября 2017 в 15:48
30
На WPEngine и WP 4.9.2 мне нужно было только обновить постоянные ссылки, чтобы получить свежий, недавно установленный сайт для возврата вызовов v2 API. Что я сделал:
- Создать сайт
- Перейдите к http://yoursitename.wpengine.com/wp-json/wp/v2/posts
- Перейдите в раздел администратор, настройки, постоянные ссылки, выберите «Post Name»
- Нажмите «Save Changes»
- Перейдите к http://yoursitename.wpengine.com/wp-json/wp/v2/posts
- успех. страница отображает JSON ответ
Поделиться
Andy Roberts
26 января 2018 в 07:35
- Скрыть определение конечных точек WordPress Rest API
Я хочу скрыть определение конечных точек в WordPress rest api… в случае https:/ / www.wpwhitesecurity.com/wp-json я хочу вернуть 404 или пустой массив, но не список конечных точек сайта. Есть идея? Спасибо!
- WordPress WP REST API ограничение запросов по домену
Это кажется более очевидным. Я использую WordPress для управления контентом для внешнего сайта. Содержимое WordPress отображается через WP REST API, и я показываю содержимое с ajax и JS на этот удаленный сайт. (например , https://example.com//wp-json/wp/v2/pages/23 ). все находится на SSL, и все…
18
Это оказалось проблемой с конфигурацией Apache.
Сначала я удалил файл .htaccess
в корневом каталоге wordpress.
Затем я перешел к /etc/apache2/sites-enabled
и открыл 000-default
Все переменные AllowOverride
были установлены в значение None, которое я заменил на All
.
Это сработало!
Поделиться
dsal1951
19 января 2016 в 22:34
8
Это ошибка разрешения файла, примените следующее решение :
Отредактируйте этот файл /etc/apache2/apache2.conf
измените разрешения /var/www/
с «None» на «All»
Перезагрузите сервер apache2
.
Поделиться
faryal rida
23 сентября 2019 в 10:16
3
Я решил эту проблему, выполнив следующие шаги:
Перейдите к ..\Apache24\conf\httpd.conf и найдите
LoadModule rewrite_module modules/mod_rewrite.so
.Включите модуль перезаписи, удалив метку
#
.Замените все случаи с
AllowOverride None
поAllowOverride All
.Не забудьте перезапустить сервер apache. 🙂
Поделиться
Patriotic
19 января 2019 в 16:29
3
Я обнаружил, что mysite/wp-json/
не работает, но mysite/?rest_route=/
был нормальным. Это нарушало некоторые, но не все функции REST API, используемые на моем сайте.
Ответом на это оказалось недавнее изменение в том, как я управлял своим сервером. Это сломало REST API, но это было очевидно только позже.
Я изменил этот домен с использования Apache на использование nginx, и я неправильно перенес настройки .htaccess
. Поэтому быстрое решение этой проблемы состояло в том, чтобы вернуться к использованию Apache. Это немедленно восстановило сайт в рабочем состоянии.
В будущем я изменю этот домен обратно на nginx, но когда я это сделаю, я проверю его и буду осторожен, чтобы не повлиять на REST API.
Поделиться
Pinkeye
22 сентября 2019 в 21:07
2
Мне пришлось вручную сделать .htaccess
, установить его на chmod 664
и скопировать в него правила постоянной ссылки.
Я также поиграл с
- Настройки > Постоянные ссылки
- Обновление .index\.php$ — [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /olddir/index.php [L]
</IfModule># END WordPress
Поделиться
mrtnmgs09 октября 2018 в 15:59
Поделиться
Zulkifl Agha23 сентября 2019 в 18:59
Похожие вопросы:
WordPress Rest API
Можно ли получить доступ к данным pluggin из базы данных WordPress с некоторым Rest API. Я видел WP REST API, но это не дает доступа к данным плагина. Более конкретно, я использую LearnDash pluggin…
WordPress acf-to-rest-api && Rest API
Активация ACF до REST API, разрывы WP REST API Если я активирую WP REST API, я могу получить данные: (в настоящее время оба включены на сайте, поэтому ссылки будут показывать ошибку)…
WordPress REST API: как получить содержимое «word-only» в файле WP REST API JSON?
Я использую WP REST API для извлечения данных с моего сайта, например, из этого http: http://localhost:8888/wordpress/wp-json/wp/v2/posts/42 я могу получить информацию о посте 42, но внутри раздела…
Запрос Нескольких Типов Сообщений С Использованием WP REST API V2 (WordPress)
В прошлом я использовал WordPress REST API версии 1 (V1) на нескольких сайтах. Одной из функций, которую я широко использовал, была возможность вызывать несколько типов сообщений в одном запросе. В…
Безопасно отключить WP REST API
Я подумываю о том, чтобы улучшить безопасность моего сайта WordPress, и при этом столкнулся с тем, что WP REST API включен по умолчанию (начиная с WP 4.4, если я не ошибаюсь). Каков безопасный…
Скрыть определение конечных точек WordPress Rest API
Я хочу скрыть определение конечных точек в WordPress rest api… в случае https:/ / www.wpwhitesecurity.com/wp-json я хочу вернуть 404 или пустой массив, но не список конечных точек сайта. Есть…
WordPress WP REST API ограничение запросов по домену
Это кажется более очевидным. Я использую WordPress для управления контентом для внешнего сайта. Содержимое WordPress отображается через WP REST API, и я показываю содержимое с ajax и JS на этот…
Есть ли какая-нибудь простая конечная точка rest api для сообщений в WordPress?
Я работаю с wordpress 4.9. Я пытаюсь использовать новый rest api. Некоторые api enpoints imlpemented по умолчанию? Там нет ни /wp-json/wp/v2/posts , ни /wp-json/wp/ , ни /wp-json/ . 404 -это ответ….
WordPress rest API возвращение 404?
У меня есть установка WP на моем сервере, которая использует WP в качестве API. Я использую несколько плагинов для получения своих данных: https://wordpress.org/plugins/acf-to-rest-api /…
WP REST API и «только аутентифицированные пользователи могут получить доступ к REST API»
У меня есть wordpress : https://example.com мне нужно использовать WP REST API. В .откройте файл. htaccess: # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase /…
json — WordPress JSON API возвращает обычную страницу сайта в формате html. Как мне получить это, чтобы дать мне JSON, как он должен
Например, ввод
http://mywordpresswebsite.example.com/?json=1
в браузер загружает основной сайт html, так же, как и пропуск переменной json querystring:http://mywordpresswebsite.example.com/
JSON API активирован. Я попытался повторно активировать и деактивировать, проверить настройки файла .htaccess и деактивировать все остальные плагины. Пока что никто из них не имел большого значения.
Tia
6
n8bar
21 Апр 2017 в 18:46
5 ответов
Лучший ответ
Итак, новая конечная точка для WordPress 4.7 — mywordpresswebsite.example.com/index.php/wp-json. Это часть WordPress Core, начиная с 4.7, и больше не является плагином, там нечего активировать. Спасибо, Марк Каплун.
3
n8bar
21 Апр 2017 в 16:46У меня была такая же проблема с моей тестовой страницей localhost, и мне было интересно, почему мой маршрут работал на прошлой неделе и был недоступен на этой неделе.
Краткое объяснение
После некоторых испытаний и большого разочарования я смог снова использовать REST API Route, следуя документации WordPress о маршруты-vs-конечные точки с помощью « Pretty Permalinks »и » Ugly «Постоянная ссылка
Более длинное объяснение
Я предполагаю, что в моем случае это было основано на переустановке моей базы данных MySQL. При установке новой базы данных моя предыдущая установка была сброшена до стандартной установки WordPress с постоянными ссылками как «обычная», что является «уродливой» постоянной ссылкой. Вот почему ответ на Mattygabe работает для меня после переустановки базы данных.
Но с этим решением у меня была проблема со значением моего фильтра, и поэтому я нашел решение с «довольно предварительными ссылками» и изменил мои постоянные ссылки на «Месяц и имя», как показано на рисунке. После этого изменения я мог получить доступ к своему REST API по желаемому маршруту.
Также могут быть некоторые трудности с REST API, связанные со следующими примерами:
- используя «wp» по маршруту REST
- если вы работаете над плагинами, которыми следует поделиться, имейте в виду, что некоторые плагины могут ограничивать доступ к REST, например, Безопасность iThemes
0
Rene
29 Май 2020 в 04:14У меня возникла проблема с возвратом html-страницы вместо ответа JSON в WordPress 5.3, и я был решен, когда я изменил Постоянную ссылку как Имя поста с обычного
0
ishq
30 Ноя 2019 в 16:19Я также испытал эту проблему. Я установил плагин WP API, а затем понял, что он мне не нужен, поэтому я деактивировал его и удалил. После этого я попытался получить GET-запрос на https://example.com/wp-json/wp / v2 / posts и получил HTML-код моего WordPress-сайта.
Чтобы это исправить, я деактивировал все плагины, а затем начал получать ответ JSON от https: //example.com/wp-json/wp/v2/posts, поэтому я прошел через каждый плагин, снова активируя, и в конце все мои плагины активны, и конечная точка отвечает JSON.
1
Brayton Stafford
21 Дек 2017 в 03:31Скорее всего, я делаю это неправильно, но когда я формирую свои запросы на установку WordPress в
http://www.example.com/
следующим образом:http://www.example.com/index.php?rest_route=/my/rest/route/here
Я получаю правильные ответы обратно.
Я потратил немало времени на то, чтобы понять это, и закончил тем, что нашел URL, отформатированный в HTML-коде, возвращенном мне. Я ожидал сделать запросы как
http://www.example.com/wp_json/wp/v2/my/rest/route/here
, но получил только HTML-ответы.(FWIW, я делаю репост на все подобные вопросы в сети StackExchange. Администраторы / моды — если это противоречит правилам или рассматривается как повтор спама, не стесняйтесь снимать его. Надеюсь помочь кому-нибудь еще решить ту же проблему, которую я и также узнать, что я сделал неправильно и почему.)
3
Mattygabe
5 Окт 2017 в 00:45Ссылка | Справочник REST API
WordPress REST API организован на основе REST и разработан так, чтобы иметь предсказуемые, ориентированные на ресурсы URL-адреса и использовать коды ответов HTTP для указания ошибок API. API использует встроенные функции HTTP, такие как HTTP-аутентификация и HTTP-глаголы, которые могут быть поняты стандартными HTTP-клиентами, и поддерживает совместное использование ресурсов между источниками, чтобы вы могли безопасно взаимодействовать с API со стороны клиента. веб приложение.
REST API использует JSON исключительно в качестве формата запроса и ответа, включая ответы об ошибках.Хотя REST API не полностью соответствует стандарту HAL, он реализует свойства HAL
._links
и._embedded
для связывания ресурсов API и полностью обнаруживается с помощью гиперссылок в ответах.REST API предоставляет общедоступные данные, доступные любому клиенту анонимно, а также личные данные, доступные только после аутентификации. После аутентификации REST API поддерживает большинство действий по управлению контентом, позволяя создавать альтернативные информационные панели для сайта, улучшать плагины с помощью более гибких инструментов управления или создавать сложные одностраничные приложения.
Этот справочник по API предоставляет информацию о конкретных конечных точках, доступных через API, их параметрах и формате данных ответа.
Наверх ↑
В отличие от многих других REST API, WordPress REST API распространяется и доступен индивидуально на каждом сайте, который его поддерживает. Это означает, что нет единственного корня или базы API, с которой можно было бы связаться; вместо этого у нас есть процесс обнаружения, который позволяет взаимодействовать с сайтами без предварительного контакта. API также предоставляет самодокументирование в конечной точке индекса или через запрос
OPTIONS
к любой конечной точке, что позволяет человеку или машине обнаруживать возможности конечной точки.Демонстрационная установка API для целей тестирования доступна по адресу
https://demo.wp-api.org/wp-json/
; этот сайт поддерживает автоматическое обнаружение и предоставляет демонстрационные данные только для чтения.Где wp-json? | WordPress.org
Радость
(@ радостно)
wp-json — это REST API для вашего сайта. Это виртуальный адрес.
У вас есть плагин, отключающий REST API? Вы пытаетесь отредактировать пользовательский тип сообщения, в котором не указано использование REST API?
Вы можете взглянуть на Инструменты> Работоспособность сайта, чтобы узнать, что он говорит о том, как настроен ваш сайт.Это чистая установка WP, единственный плагин, который у меня запущен, — это Akismet. Все, что я делаю, это пытаюсь создать новую страницу в своем блоге
.
После проверки «Инструменты»> «Работоспособность сайта» дополнительный модуль PHP отсутствует, и REST API выдал ошибку 404.
Как ни странно, я потерял строки конфигурации в wp-config.php, которые позволяют вести несколько блогов (Я ДЕЙСТВИТЕЛЬНО не знаю, как это произошло). Собираюсь разобрать все это и снова начать с нуля, я повторно выложу обновление (вероятно, через несколько дней)
Чистая установка с чистой базой данных, устранены некоторые незначительные проблемы в разделе Инструменты> Работоспособность сайта, но REST API по-прежнему выдает ошибку 404 Not Found
Пожалуйста, попробуйте изменить пармалиновую ссылку на «Post Name».WP Rest API не работает с «Custom Structure» 🙂
У меня такая же ошибка.
Ошибка публикации. Сообщение об ошибке: ответ не является допустимым ответом JSON.мой пермалин указан в названии поста.
также эта ошибка:
wp-json Нет такого файла или каталогаесть обновления по этой проблеме?
Если ваш веб-сайт не использует красивую печать, wp-json не будет правильным URL-адресом.Вы узнаете, использует ли ваш сайт красивую печать, потому что ссылки будут http://www.example.com/?p=3 вместо http://www.example.com/my-article-slug.
Если wwww.example.com/wp-json/ не возвращает данные JSON, попробуйте http://www.example.com/index.php?rest_route=/. Если вы действительно в затруднительном положении, получите вывод get_rest_url, чтобы найти URL-адрес REST
.
Сегодня утром у меня была такая же проблема. Прочитав здесь отношение .htaccess, я только что обновил не очень старый.htaccess, и проблема была решена.
У меня как раз была такая проблема. Мой симптом заключался в том, что постоянные ссылки не работали. Исправление заключалось в изменении конфигурации Apache для каталога, добавляя:
AcceptPathInfo на
Я думаю, вы можете добавить его в .htaccess, но я добавил его в конфигурацию сервера.
Если он включен, то URL-адреса типа /index.php/path/to-page/ будут работать. Apache будет искать путь к существующему файлу, а затем передать URL-адрес этому файлу.
Моя вторичная проблема заключалась в том, что мой .htaccess вообще не читался, потому что не были включены параметры. В настоящее время я использую .htaccess, но было бы более эффективно переместить их в конфигурацию сервера, чтобы избежать чтения лишнего файла.
Проблемы с общими URL-адресами возникают из:
на хосте
1. в корневом каталоге wordpress отсутствует файл .htaccess
2. неправильная версия php
3. отсутствующие расширения phpв wp
1. Постоянные ссылки «должны» быть изменены со значения по умолчанию на имя сообщения (или пользовательское)
2.несоответствие URL-адреса веб-сайта конфигурации WordPress и домена веб-сайта сервераПочему REST API включен по умолчанию?
@ katsar0v Не создавайте повторяющихся тем. Я закрыл другую вашу тему.
tl; dr Вы можете отключить это через плагин. Я пользуюсь этим.
Для дополнительной безопасности добавьте плагин 2FA.
https://wordpress.org/plugins/search/2FA/
Я лично этим пользуюсь.
Более длинный ответ:
В
/ wp-json / wp / v2 / users
нет ничего, что еще не было представлено черезhttps: // some-site-url / author / userid /
, и перечисление имен пользователей никогда не было связано с безопасностью. И никогда не будет, предполагается, что публичная часть транзакции входа будет публичной.Например: Вот мои имена пользователей.
jdembowski
Которые вы можете получить здесьhttps: // profiles.wordpress.org/jdembowski/
А вот
https://wordpress.org/support/users/jdembowski/
А вот
https://make.wordpress.org/support/author/jdembowski/
И даже на моем собственном сайте
https://blog.dembowski.net/author/jan/
asjan
, что не работает, потому что я немного взломал свой сайт. Ссылки — на каждую из 900+ моих сообщений в блоге.И в Твиттере тоже
https: // twitter.com / jan_dembowski /
asjan_dembowski
Я также могу войти в любую из этих систем, используя свой адрес электронной почты, который я не буду публиковать в качестве спама. Это не совсем секрет, и нет, не публикуйте здесь чьи-либо электронные письма, чтобы подчеркнуть суть дела.
Все мои системы используют такие пароли.
2XbM * aTA9qtgV! HUy_LC @ c mDjAt323viF @ pW3dZbtN! а PhYPvPPEjkb3qu * x @ ZykEa
Я использую инструмент под названием 1Password для их создания, хотя есть много других.Когда я особенно беспокоюсь о безопасности, я включаю двухфакторную аутентификацию для входа.
Все, что вы не можете явно контролировать, например ваш идентификатор пользователя, не может считаться частью решения безопасности. Вот почему у вас есть пароли и во многих местах 2FA или даже MFA (что круто). Ваш идентификатор пользователя, например адрес электронной почты, является просто идентификатором. Он никогда не должен быть секретным, и в случае с вашим адресом электронной почты вы постоянно его раздаете.
Вы не писали приведенную ниже цитату, но я пытаюсь быть полным.
Но вы используете плагин для отключения REST API для незарегистрированных пользователей.
Да, но не из соображений безопасности. Я пытаюсь и не могу отфильтровать Gravatars в ответах REST API. Я установил этот плагин, чтобы посмотреть, как он работает.
(Gravatars потенциально раскрывает адреса электронной почты, и я заменяю их встроенным изображением в кодировке base64. Я тоже не думаю, что это угроза, но у меня был свободный день.)
Если вы сделаете идентификатор пользователя секретным, у вас теперь есть два секрета.И если ваш секретный идентификатор пользователя не известен, какие у вас есть средства? Получить новый идентификатор пользователя? Вы можете менять свой пароль так часто, как захотите. Это и было задумано, и именно здесь решается вопрос безопасности.
Используйте надежные пароли. Добавьте 2FA, если считаете это необходимым. Но не ставьте безопасность в свой идентификатор пользователя. Это нигде не предназначено.
- Этот ответ был изменен 1 год, 10 месяцев назад пользователем Jan Dembowski. Причина: глупые опечатки
Невозможно использовать конечную точку API / wp-json / wp / v2 / plugins даже с правами администратора
ПРЕДЛОЖЕНИЯ
Предлагаю следующее:
curl --user username: password https: // example.com / wp-json
Первый запрос должен быть успешным в любом случае, потому что он, скорее всего, будет (если вы не сделали иначе) незащищенным.
Тогда попробуйте:
curl - имя пользователя: пароль https://example.com/wp-json/wp/v2/plugins
Если это не удается, у вас может не быть средств для выдачи запросов базовой аутентификации, поэтому добавьте их в целях тестирования.
Установите следующее:
https://github.com/WP-API/Basic-Auth/blob/master/basic-auth.php
Я бы просто рекомендовал разместить этот файл в каталоге
wp-content / mu-plugins
вашего сайта. Если каталог не существует, сначала создайте его.Затем повторите запрос curl:
curl - имя пользователя: пароль https://example.com/wp-json/wp/v2/plugins
Если вы прошли аутентификацию правильно, вы должны получить ответ, соответствующий этой конечной точке.
ИСПЫТАНИЯ
- Я проверил это, попробовав сначала установить
5.3. *
и маршрута не существует (как и следовало ожидать) - Я тестировал это на установке
5.5. *
, и маршрут действительно существует, но требует метода аутентификации (для тестирования я использовал базовую аутентификацию), и вы можете узнать больше о методах аутентификации в целом здесь: https: // developer.wordpress.org/rest-api/using-the-rest-api/authentication/
ПРИМЕЧАНИЕ (при аутентификации):
В зависимости от того, чего вы пытаетесь достичь, вы можете воспользоваться более надежной аутентификацией, такой как OAuth или пароли приложений (см. Https: // wordpress.org / plugins / application-passwords /), но здесь выбор в конечном итоге за вами, может быть достаточно простой аутентификации, но помните о соображениях безопасности, связанных с хранением имени пользователя и паролей в виде обычного текста для данного пользователя, выполняющего запрос. Вы можете захотеть создать конкретное использование с достаточным количеством разрешений / возможностей для этой цели, если полагаетесь на базовую аутентификацию.
Полезное чтение:
Как использовать остальные API с WordPress
Опубликовано в WordPress от WP Engine
Последнее обновление 11 января 2021 г.
Интерфейс прикладного программирования (API) (иногда называемый WP JSON REST API) — это тип программного обеспечения, которое позволяет двум приложениям работать друг с другом путем обмена информацией.Вы можете использовать несколько типов API, включая параметры передачи репрезентативного состояния (REST). REST API — это в основном программное обеспечение, которое позволяет двум приложениям обмениваться данными с использованием определенного набора ограничений.
В частности, WordPress REST API позволяет подключать ваш веб-сайт WordPress к внешним приложениям. Это означает, что вы можете разработать мобильное приложение, используя практически любой язык программирования, и использовать WP REST API для извлечения данных из WordPress. В каком-то смысле REST API предлагает способ освободиться от внутренней структуры WordPress, используя ее, чтобы помочь вам создать приложение.
В этой статье мы расскажем, как работает WordPress REST API, и поможем вам начать работу с ним с нуля. Давай приступим к работе!
Как работает WordPress REST API
Раньше для доступа к WordPress REST API требовался плагин. Однако, начиная с версии 4.4, этот WP API стал частью основного программного обеспечения. Таким образом, чтобы использовать REST API, вам просто нужно знать, как с ним взаимодействовать, что сводится к использованию четырех различных типов HTTP-методов как части ваших запросов:
- GET : С помощью этого метода вы можете получить информацию с сервера.
- POST : Это позволяет отправлять информацию на соответствующий сервер.
- PUT : С помощью метода put вы можете редактировать и обновлять существующие данные.
- УДАЛИТЬ : Это позволяет удалить информацию.
В качестве примера рассмотрим, что происходит, когда вы посещаете свою страницу входа в WordPress. Ваш браузер отправляет запрос GET на сервер, который обрабатывает его, используя собственный API.После загрузки страницы вы вводите свои учетные данные и отправляете их через запрос POST . Если вы хотите изменить свой пароль, он использует метод PUT , тогда как для полного удаления вашей учетной записи будет использоваться DELETE .
Мы покажем вам примеры того, как использовать эти методы с WordPress REST API через минуту. А пока давайте рассмотрим некоторые другие концепции, которые вам нужно сначала понять.
Знакомство с WordPress REST API
Чтобы действительно понять, как работает WordPress REST API, есть несколько советов и концепций, с которыми вам необходимо ознакомиться.Когда мы вскоре перейдем к реальным примерам, вы увидите, как все работает на практике.
Понятия и термины REST API
При использовании WordPress REST API вы будете постоянно видеть одни и те же термины, в том числе:
- «Маршруты» и «конечные точки»: Маршрут — это URL-адрес, который вы вводите для запроса, тогда как конечная точка — это комбинация URL-адреса с методом HTTP.
- Запросы: Отправляя конечную точку, вы отправляете запрос на сервер.
- Ответы: Если ваша конечная точка структурирована правильно, вы получите ответ, содержащий информацию, которую вы хотите в нотации объектов JavaScript (JSON), или ошибку.
- Схемы: Каждый ответ, который вы получаете, следует аналогичным структурам, которые управляются встроенными схемами.
- Классы контроллеров: Вы можете использовать их для создания собственных маршрутов и конечных точек, но это относится к более продвинутому использованию WordPress REST API.
Конечные точки REST API
В большинстве случаев вы будете использовать уже существующие маршруты и конечные точки для отправки запросов через WordPress REST API.Знание, что это за конечные точки, — первый шаг к освоению WP API и его использованию для разработки собственных проектов.
Аутентификация REST API
Как и следовало ожидать, WordPress не позволит вам получить доступ к определенным данным, если они не подтвердят, кто вы и запрашиваете ли вы их через браузер или REST API. Например, если вы хотите обновить или опубликовать сообщение с помощью команд, вам необходимо изучить основы аутентификации.
Примеры использования WordPress REST API
REST API уже находит практическое применение на ряде крупных веб-сайтов.Чтобы дать вам несколько идей о функциях, которые вы могли бы реализовать, давайте рассмотрим несколько примеров REST API WordPress.
США сегодня
Сайт USA Today был перестроен с использованием WordPress REST API, чтобы облегчить интеграцию с другими сайтами и сторонними сервисами. Это позволяет легко отправлять контент в такие службы, как Facebook и Apple News.
WordPress.com
Естественно, сайт WordPress.com активно использует WP API.В данном случае это серверная часть, на страницах администратора, которые полностью построены с использованием API.
Нью-Йорк Таймс
The New York Times использует WP REST API для ведения живого блога, где журналисты могут добавлять важные новостные события в режиме реального времени. Они даже могут публиковать сообщения в блоге прямо из Slack благодаря API, который обеспечивает более плавный рабочий процесс.
Как начать использовать WordPress REST API (за 3 шага)
Пока мы изучили много теории, так что пора перейти к руководству по конечным точкам WordPress.В этом разделе мы покажем вам, как получить доступ к REST API, получить список конкретных данных и добавить новую информацию с помощью конечной точки. Давай приступим к работе!
Шаг 1. Доступ к REST API
Вы можете «получить доступ» к WordPress REST API из любого приложения, которое может отправлять конечные точки HTTP. Например, если вы введете следующую команду в своем любимом браузере, вы получите список ваших записей WordPress в формате JSON:
ПОЛУЧИТЕ yourwebsiteurl.com/wp-json/wp/v2/posts
Однако вам необходимо заменить URL-адрес заполнителя на URL-адрес вашего собственного веб-сайта.Вам также необходимо использовать версию WordPress выше 4.4, чтобы запрос REST API работал (что вы уже должны делать).
Однако если вы хотите по-настоящему поэкспериментировать с REST API, браузер — не лучший инструмент для этого. Вместо этого мы рекомендуем использовать командную строку, которая обеспечивает более гибкий подход.
Шаг 2. Получение определенного сообщения с помощью REST API
Последняя выполненная команда должна вернуть список всех ваших сообщений WordPress, включая их идентификаторы.Чтобы получить конкретное сообщение по его идентификатору, вы должны использовать такую конечную точку:
ПОЛУЧИТЕ yourwebsiteurl.com/wp-json/wp/v2/posts/535
Например, это было бы идеально для демонстрации определенного сообщения, переведенного в мобильном приложении. Однако WordPress REST API позволяет получать все виды данных из WordPress, поэтому его практические приложения невероятно гибкие.
Однако, допустим, вы хотите использовать REST API для добавления метаданных к выбранному сообщению, а не просто для его получения.Другими словами, вы будете использовать метод POST вместо GET .
Шаг 3. Добавьте метаданные в конкретное сообщение
Предполагая, что вы уже прошли аутентификацию, вы можете добавить новые данные в любое из своих сообщений, используя запрос, аналогичный представленному в последнем разделе, используя POST вместо GET :
РАЗМЕСТИТЬ yourwebsiteurl.com/wp-json/wp/v2/posts/535/meta?value=newmetadata
Например, если вы хотите добавить метаданные, которые можно использовать для создания расширенного фрагмента для рецепта, запрос может выглядеть следующим образом:
РАЗМЕСТИТЕ yourwebsiteurl.com / wp-json / wp / v2 / posts / 535 / meta? Cooktime = 25
В зависимости от того, сколько метаданных вы хотите добавить, вы можете указать их, используя вместо этого объекты JSON, что предлагает гораздо более структурированный подход. В любом случае, как только вы познакомитесь с наиболее распространенными конечными точками и способами их использования, перед вами откроется целый мир возможностей.
Добавить конечные точки в WordPress
WordPress REST API поддерживает настраиваемые маршруты и конечные точки. Это полезно, если вы хотите создать второй сайт WordPress и добавить интеграции между ними.
Маршруты
в REST API также поддерживают неограниченное количество конечных точек. Вы можете указать методы HTTP, функции обратного вызова и разрешения, а также значения по умолчанию и несколько других параметров для каждой конечной точки.
Начните создание веб-сайта WordPress, который вы себе представляете
WordPress REST API существует уже несколько лет. Если вы никогда не использовали его раньше, вам нужно многому научиться, чтобы достичь того момента, когда вы сможете использовать его для разработки сложных приложений.
В WP Engine мы предлагаем вам все ресурсы, которые помогут вам узнать как можно больше о WordPress REST API и о том, как его использовать. Хотя это руководство предлагает базовое введение, вам также стоит прочитать нашу электронную книгу Ultimate WordPress REST API, а также наше руководство для не разработчиков!
Ограничить доступ к WordPress REST API — плагин безопасности WordPress, брандмауэр, антиспам
WP Cerber Security позволяет ограничить или полностью заблокировать доступ к WordPress REST API, который включен по умолчанию.Чтобы включить защиту, перейдите на вкладку «Укрепление» и включите Блокировать доступ к WordPress REST API, кроме любого из следующих . Это блокирует доступ к REST API, если вы не предоставите доступ к нему в полях настроек ниже или не добавите IP-адрес в белый список доступа IP.
Ограничить доступ к WordPress REST API
Если вы используете Contact Form 7, Jetpack или другой плагин, который использует REST API, вам необходимо внести в белый список его пространства имен REST API, как описано ниже.
Разрешить доступ к определенному пространству имен REST API
Пространство имен REST API — это часть URL-адреса запроса, которая позволяет WordPress распознавать, какой программный код обрабатывает определенный запрос REST API.Чтобы получить пространство имен, возьмите строку между / wp-json / и следующей косой чертой в URL-адресе REST. Каждый плагин, использующий REST API, использует собственное уникальное пространство имен. В таблице ниже показаны пространства имен для некоторых плагинов.
Плагин Пространство имен Контактная форма 7 контакт-форма-7
Формы кальдеры cf-api
Yoast SEO лет
Реактивный ранец реактивный ранец
Укажите исключения пространства имен для REST API, если это необходимо, как показано на снимке экрана
Разрешите пользователям использовать REST API
Включить Разрешить REST API для зарегистрированных пользователей , если вы хотите разрешить использование REST API для любого авторизованного (вошедшего в систему) пользователя WordPress без ограничений.
Ограничить доступ к WordPress REST API по IP-адресам
Чтобы разрешить доступ к REST API с определенного IP-адреса или IP-сети, добавьте их в Белый список доступа IP.
Чтобы полностью заблокировать доступ к REST API с определенного IP-адреса или IP-сети, добавьте их в черный список доступа IP.
Подробнее: Использование списков IP-доступа для защиты WordPress
Как остановить перечисление пользователей REST API
Чтобы заблокировать доступ к данным пользователей и остановить перечисление пользователей через REST API, необходимо включить Блокировать доступ к данным пользователей через настройку REST API на вкладке «Укрепление».Эта функция безопасности предназначена для обнаружения и предотвращения сканирования вашего сайта хакерами на предмет логинов и конфиденциальных данных пользователей.
Когда он включен, Cerber блокирует все запросы к REST API и возвращает ошибку HTTP 403. Вы можете отслеживать такие события на вкладке «Активность». Они регистрируются как «Запрос к REST API отклонен».
Доступ к данным пользователей через WordPress REST API всегда предоставляется в двух случаях:
- Для учетных записей администраторов, то есть если включена функция «Остановить перечисление пользователей» через REST API, все пользователи с ролью администратора всегда имеют доступ к данным пользователей
- Для всех IP-адресов в белом списке доступа IP
Что такое REST API?
Вкратце, это технология, которая позволяет двум различным частям кода (приложениям) взаимодействовать друг с другом и обмениваться данными стандартизованным способом.Использование REST API позволяет разработчикам создавать, читать и обновлять контент WordPress из внешних приложений, запущенных на удаленном компьютере или веб-сайте. WP REST API включен по умолчанию, начиная с версии WordPress 4.7.0.
Подробнее: Почему важно ограничить доступ к WP REST API
Документация для разработчиков
: https://developer.wordpress.org/rest-api/
Знаете ли вы, что вы можете удаленно управлять настройками REST API на любом количестве веб-сайтов? Включите Cerber.Главный режим концентратора на основном веб-сайте и подчиненный режим на других ваших веб-сайтах для управления всеми настройками WP Cerber с одной панели управления WordPress путем переключения между вашими веб-сайтами одним щелчком мыши.
Следующие шаги, которые укрепят вашу безопасность WordPress
Что такое Cerber Security? Это комплексное решение безопасности для WordPress, которое представляет собой простой, но эффективный плагин с ограничением количества попыток входа в систему.
Есть вопросы?
Если у вас есть вопросы относительно безопасности WordPress или WP Cerber, оставьте их в разделе комментариев ниже или получите ответ здесь: G2.COM / WPCerber.
Настройка ответа REST API в WordPress
WordPress REST API — это основная функция, представленная в WordPress 4.7, позволяющая разработчикам выполнять HTTP-запросы для доступа к данным WordPress в виде объекта JSON. REST API позволяет использовать множество различных решений, независимо от того, хотите ли вы создать независимый веб-сайт или приложение с данными из серверной части WordPress или просто разрешить внешним веб-сайтам читать ленту сообщений. В этой статье рассматриваются распространенные сценарии настройки ответа REST API на запросы GET к сообщениям.
Краткий обзор основного API
По умолчанию информацию о записях сайта WordPress можно найти по адресу
yourwebsite.address / wp-json / v2 / posts
. Эта конечная точка отображает 10 самых последних сообщений любого типа. Фактически в ответе по умолчанию возвращаются строки и поля в таблице базы данныхwp_posts
типа «post», а также идентификаторы избранного изображения, категорий и тегов, если таковые имеются. Точно так же страницы (сообщения типа «страница» в базе данных WordPress) можно найти по адресуyourwebsite.адрес / wp-json / v2 / pages
.Добавление произвольных типов записей
REST API поддерживает настраиваемые типы сообщений, но если настраиваемый тип сообщений был зарегистрирован без установки для аргумента
show_in_rest
значенияtrue
, ответ вернет 404 с кодомrest_no_route
. В идеале, если веб-сайт WordPress регистрирует настраиваемый тип сообщения через настраиваемую тему или плагин , изменение может быть выполнено в исходном массиве аргументов, переданном в register_post_type ():function pluginname_custom_post_type () { $ args = массив ( 'label' => 'Пользовательский тип сообщения', 'public' => истина, 'show_in_rest' => правда, 'rest_base' => 'пользовательский' ); register_post_type ('custom_post_type', $ args); } add_action ('инициализация', 'custom_post_type');
Примечание. Большинство аргументов настраиваемого типа записи будут и должны использовать больше из множества доступных опций типа записи, чем показано в этом коротком примере.
Однако, если пользовательский тип сообщения был зарегистрирован в стороннем или добавленном плагине или теме, лучше изменить список аргументов в функции, расположенной в пользовательской теме или плагине, и вызвать хук
register_post_type_args
:функция pluginname_modify_custom_post_type ($ args, $ post_type) { if ($ post_type == 'custom_post_type') { $ args ['show_in_rest'] = истина; $ args ['rest_base'] = 'пользовательский'; } вернуть $ args; } add_action ('register_post_type_args', 'modify_custom_post_type');
В любом случае установка
show_in_true
наtrue
позволяет получить доступ к новой конечной точке с использованием значенияrest_base
.В этом примере:/ wp-json / wp / v2 / custom
.Добавление полей в ответ ядра WordPress
Бывают случаи, когда необходимо или просто удобно изменить поля, возвращаемые в ответе. Например, в то время как любые данные, включенные в раздел
_links
сообщения с"embeddable": true
, могут быть включены полностью без выполнения другого HTTP-запроса путем добавления_embed = 1
к запросу, встроенные данные могут быть слишком многослойным, чтобы с ним было легко работать с точки зрения клиента API:"_embedded": { "author": {{ "id": 1, "name": "Атен Дизайн Групп", "url": "https: // www.aten.io ", "описание": "", "ссылка": "https://www.aten.io", "слизняк": "атендесигнгрупп" }} }
В примере случая, когда клиенту API требуется имя автора сообщения, представленное на том же уровне, что и заголовок сообщения и дата публикации, лучше всего добавить новое поле в ответ. Важно, чтобы не изменял существующее поле
author
, чтобы клиенты API могли продолжать работать со стандартным ответом ядра, независимо от потребностей какого-либо одного клиента.register_rest_field () следует использовать в настраиваемой функции для добавления полей в ответ REST API и вызова этой функции с помощью ловушки
rest_api_init
:function pluginname_get_author_name ($ post, $ field_name, $ request) { return get_the_author_meta ('display_name', (int) $ post ['автор']); } function pluginname_add_author_name_to_api () { register_rest_field ('сообщение', 'имя автора', множество( 'get_callback' => 'pluginname_get_author_name' ) ); } add_action ('rest_api_init', 'pluginname_add_author_name_to_api');
Создание пользовательской конечной точки
Бывают случаи, когда конечные точки и поля REST API ядра WordPress не подходят для проекта:
- Требуется выключить конечные точки ядра,
- требует аутентификации для настраиваемой конечной точки, а не для основных конечных точек, или наоборот,
- полей ограничения или изменения,
- возвращает очень конкретный набор полей или
- какое-то сочетание этих причин.
Возвращено
В любом из этих случаев может потребоваться создать настраиваемую конечную точку с помощью register_rest_route:
function pluginname_get_post_items () { $ args = массив ( 'post_status' => 'опубликовать' ); $ items = array (); if ($ posts = get_posts ($ args)) { foreach ($ posts как $ post) { $ items [] = массив ( 'id' => $ post-> ID, 'title' => $ post-> post_title, 'author' => get_the_author_meta ('display_name', $ post-> post_author), 'content' => apply_filters ('the_content', $ post-> post_content), 'тизер' => $ post-> post_excerpt ); } } вернуть $ items; } function pluginname_get_page_items () { $ items = array (); if ($ pages = get_pages ($ args)) { foreach ($ pages как $ page) { $ items [] = массив ( 'id' => $ page-> ID, 'title' => $ page-> post_title, 'author' => get_the_author_meta ('display_name', $ page-> post_author), 'content' => apply_filters ('the_content', $ page-> post_content), 'тизер' => $ page-> post_excerpt ); } } вернуть $ items; } function pluginname_register_api_endpoints () { register_rest_route ('pluginname / v2', '/ posts', array ( 'methods' => 'ПОЛУЧИТЬ', 'callback' => 'pluginname_get_post_items', )); register_rest_route ('pluginname / v2', '/ pages', array ( 'methods' => 'ПОЛУЧИТЬ', 'callback' => 'pluginname_get_page_items', )); } add_action ('rest_api_init', 'pluginname_register_api_endpoints');
Знакомство с возможностями WordPress REST API — это первый шаг к нестандартному мышлению с WordPress CMS и созданию новых приложений, использующих стандартные структурированные данные и серверную часть WordPress.
Добавить комментарий