Содержание

Маршруты 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, embedID термина (рубрики).
Только для чтения.
count
число
view, editКоличество записей находящихся в термине (рубрике).
Только для чтения.
description
строка
view, editОписание термина (рубрики).
link
строка, uri
view, edit, embedURL термина (рубрики).
Только для чтения.
name
строка
view, edit, embedНазвание термина (рубрики).
slug
строка
view, edit, embedСлаг (ярлык) термина (рубрики), обычно создается из названия.
taxonomy
строка
view, edit, embedНазвание таксономии.
Только для чтения.
Может быть: category, post_tag, nav_menu, link_category, post_format
parent
число
view, editID родительского термина.
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, embedURL объекта.
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, embedID автора объекта.
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, embedMIME тип вложения.
media_details
Объект readonly
view, edit, embedПодробности о медиа файле, специфичные его типу.
post
Число
view, editID для ассоциированых записей для вложения.
source_url
Строка readonly
view, edit, embedURL оригинала файла вложения.
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

  1. Затем нажмите на настройки

  2. Затем нажмите на постоянные ссылки

  3. Затем установите постоянные ссылки на » post-name »

  4. сохранить изменения

Поделиться


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:

  1. Скачать плагин можно здесь: http://v2.wp-api.org/

  2. установите и активируйте его.

Использование

Чтобы получить все сообщения:

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. Что я сделал:

  1. Создать сайт
  2. Перейдите к http://yoursitename.wpengine.com/wp-json/wp/v2/posts
  3. Перейдите в раздел администратор, настройки, постоянные ссылки, выберите «Post Name»
  4. Нажмите «Save Changes»
  5. Перейдите к 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

Я решил эту проблему, выполнив следующие шаги:

  1. Перейдите к ..\Apache24\conf\httpd.conf и найдите LoadModule rewrite_module modules/mod_rewrite.so .

  2. Включите модуль перезаписи, удалив метку # .

  3. Замените все случаи с AllowOverride None по AllowOverride All .

  4. Не забудьте перезапустить сервер 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

    Поделиться


    mrtnmgs    

    09 октября 2018 в 15:59


    Поделиться


    Zulkifl Agha    

    23 сентября 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 Вы можете отключить это через плагин. Я пользуюсь этим.

    Disable WP REST API

    Для дополнительной безопасности добавьте плагин 2FA.

    https://wordpress.org/plugins/search/2FA/

    Я лично этим пользуюсь.

    Two-Factor

    Более длинный ответ:

    В / 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/ as jan , что не работает, потому что я немного взломал свой сайт. Ссылки на каждую из 900+ моих сообщений в блоге.

    И в Твиттере тоже https: // twitter.com / jan_dembowski / as jan_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 всегда предоставляется в двух случаях:

    1. Для учетных записей администраторов, то есть если включена функция «Остановить перечисление пользователей» через REST API, все пользователи с ролью администратора всегда имеют доступ к данным пользователей
    2. Для всех 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.