Wordpress REST API установлен и включен в обычной установке Wordpress 4.7?

29

Я только что установил Wordpress 4.7. Одним из упоминаний в объявлении является то, что в нем есть API REST.

Мое понимание таково:

  • Плагин Wordpress REST API больше не нужен, потому что предположительно он уже объединен с ядром в Wordpress 4.7.
  • Wordpress REST API включен по умолчанию

Тем не менее, я замечаю, что в обычной установке Wordpress 4.7 ни одна из конечных точек не работает (например http://examples.com/wp-json/wp/v2/posts).

Как узнать, действительно ли новый REST API активирован? Можно ли включить или отключить REST API с помощью обычного пользовательского интерфейса Wordpress, или я должен установить для этого сторонний плагин?

бодрость духа
источник
1
Есть ли тег обнаружения в источнике страницы? <link rel='https://api.w.org/' href='https://example.com/wp-json/' />Кажется, просто работать на моих сайтах.
Rarst
@Rarst, если я grep -r "<link rel='https://api.w.org/'" .в htmlкаталоге, он возвращает один попадание в файл ./wp-includes/rest-api.phpс этим текстом:echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";
Pep
Не в вашем исходном коде, а в исходном HTML-коде страницы вашего сайта в браузере.
Rarst
1
@Rarst, да, я вижу<link href="http://example.com/wp-json/" rel="https://api.w.org/">
Пеп
Что дает вам открытие ссылки в браузере? С включенным WP_DEBUG?
Rarst

Ответы:

21

4.7 по умолчанию включен Простой способ проверить, работает ли он, - это просто посетить URL-адрес example.com/wp-json, и вы должны получить там список зарегистрированных конечных точек.

Официальной опции отключить его нет, поскольку (по крайней мере, говорили об этом, не уверен, попал ли он в релиз), от этого зависит некоторая базовая функциональность.

Наиболее очевидные вещи, которые нужно проверить, если он не работает, - это ваши правила htaccess, и есть ли у вас каталог wp-json

Марк Каплун
источник
У меня нет каталога wp-json /var/www/htmlили его подкаталогов. У меня, похоже, нет .htaccessфайла (кроме как /var/www/html/wp-content/plugins/akismet/.htaccess, должен ли я его иметь?
Pep
@Pep, какой веб-сервер вы используете? у вас есть довольно постоянные ссылки?
Марк Каплун
Apache. Я точно следовал инструкциям, приведенным
Пеп
не знаком с AWS, но если вы установили ванильный WordPress, вы должны иметь .htaccess в корне вашей установки. Если вы не пытаетесь перейти к настройке> постоянные ссылки, убедитесь, что вы не используете обычную настройку, сохраните, а затем проверьте, был ли создан htaccess
Марк Каплун,
6
Я наконец нашел проблему. Поскольку я не знал, что для работы REST API потребуется постоянная ссылка, во время начальной настройки я пропустил шаг, который нужно установить AllowOverride Allв <Directory "/var/www/html">разделе /etc/httpd/conf/httpd.conf. Вот почему он игнорировал мои изменения .htaccess. Теперь с постоянной ссылкой, отличной от PLain, конечные точки REST API работают.
Пеп
11

Я 4.7 также думал, что REST API был отключен, но меня обманули по URL. Чтобы увидеть правильный URL, найдите строку, похожую на эту:

link rel = ' https://api.w.org/' href = ' http://mysite?rest_route=/' />. Итак, использование http: // mysite? Rest_route = / в качестве префикса решило мою проблему. Например, чтобы восстановить сообщения, достаточно набрать: http: // mysite? Rest_route = / wp / json

Я не смог найти в документации, что параметр запроса был необходим. Был ли я один?

Эдвард
источник
Работал для меня с WordPress 4.8.x Не уверен, почему это нигде не задокументировано.
Anirudha
2
Не единственный Только нашел этот ответ в вашем комментарии после 10 минут поиска. Нужно было сделать:www.example.com?rest_route=/wp/v2/posts
Евгений К
3
Я думаю, что это происходит, когда красивые постоянные ссылки не включены. Из документов ... "На сайтах без красивых постоянных ссылок вместо URL-адреса в качестве параметра rest_route добавляется маршрут. Для приведенного выше примера полным URL-адресом будет example.com/?rest_route=/wp/v2/posts / 123 "
Джайлз Батлер
1

Я вижу, вы исправили проблему, но оставили мое решение здесь, поскольку оно работало и для меня. У меня была такая же проблема при обновлении с бета15 до API ядра в wp 4.7 Оказывается, проблема заключалась в том, что у меня были некоторые плагины, которые использовали устаревшую функцию register_api_field, которую я изменил на register_rest_field согласно этой заметке в журнале изменений:

BREAKING CHANGE: переименуйте register_api_field () в register_rest_field ().

Представляет функцию register_api_field () для обратного компатации, которая вызывает _doing_it_wrong (). Однако register_api_field () никогда не будет привязан к ядру WordPress, поэтому вам следует обновить вызовы функций.

дружественный огонь
источник
1

Если REST API не работает "из коробки" или после новой установки и после ввода

mydomain/wp-json/wp/v2/posts 

тогда вам нужно будет просто активировать ваши "постоянные ссылки" в качестве расположенного на нем post_name:

WP Dashboard-> Настройки-> Постоянные ссылки

Или, если вы не хотите активировать постоянные ссылки, вы можете просто набрать:

mydomain?rest_route=/wp/v2/posts

Чувак, я бы хотел, чтобы WordPress обновил справочник Rest, чтобы сделать его более удобным для пользователей. Мне нравится старая версия документов :)

samjco
источник