Czy interfejs API REST Wordpress jest zainstalowany i włączony w waniliowej instalacji Wordpress 4.7?

29

Właśnie zainstalowałem Wordpress 4.7. Jednym z wzmianek w ogłoszeniu jest to, że zawiera interfejs API REST.

Rozumiem:

  • Wtyczka REST API Wordpress nie jest już potrzebna, ponieważ przypuszczalnie została już scalona z rdzeniem w Wordpress 4.7.
  • Interfejs API REST Wordpress jest domyślnie włączony

Zauważam jednak, że w waniliowej instalacji Wordpress 4.7 żaden z punktów końcowych nie działa (na przykład http://examples.com/wp-json/wp/v2/posts).

Jak mogę sprawdzić, czy nowy interfejs API REST jest naprawdę aktywowany? Czy interfejs API REST można włączyć lub wyłączyć za pomocą waniliowego interfejsu Wordpress UI, czy powinienem w tym celu zainstalować wtyczkę innej firmy?

Energia
źródło
1
Czy w źródle strony jest tag odkrycia? <link rel='https://api.w.org/' href='https://example.com/wp-json/' />Wydaje się, że po prostu działa na moich stronach.
Rarst
@Rarst, jeśli jestem grep -r "<link rel='https://api.w.org/'" .w htmlkatalogu, zwraca jedno trafienie w pliku ./wp-includes/rest-api.phpz tym tekstem:echo "<link rel='https://api.w.org/' href='" . esc_url( $api_root ) . "' />\n";
Pep
Nie w kodzie źródłowym, w źródłowym HTML strony z Twojej witryny w przeglądarce.
Rarst
1
@Rarst, tak, rozumiem<link href="http://example.com/wp-json/" rel="https://api.w.org/">
Pep
Co daje otwarcie linku w przeglądarce? Z włączoną WP_DEBUG?
Rarst

Odpowiedzi:

21

4.7 ma to włączone domyślnie. Najłatwiejszym sposobem sprawdzenia, czy działa, jest odwiedzenie adresu URL example.com/wp-json i tam powinna zostać wyświetlona lista zarejestrowanych punktów końcowych

Nie ma oficjalnej opcji, aby ją wyłączyć, ponieważ (przynajmniej była rozmowa o tym, nie wiem, czy dostała się w wersji), niektóre podstawowe funkcje zależą od tego.

Najbardziej oczywistymi rzeczami, które należy sprawdzić, jeśli nie działa, są reguły htaccess i czy masz katalog wp-json

Mark Kaplun
źródło
Nie mam katalogu wp-json /var/www/htmlani w jego podkatalogach. Wydaje mi się, że nie mam .htaccesspliku (poza tym /var/www/html/wp-content/plugins/akismet/.htaccess, czy powinienem go mieć?)
Pep
@Pep, jakiego serwera używasz? czy masz całkiem niezłe linki bezpośrednie?
Mark Kaplun,
nie zna AWS, ale jeśli zainstalowałeś waniliowe wordpress, powinieneś mieć plik .htaccess w katalogu głównym instalacji. Jeśli nie, spróbuj przejść do ustawienia> bezpośrednie łącza, upewnij się, że nie używasz zwykłego ustawienia, zapisz, a następnie sprawdź, czy wygenerowano htaccess
Mark Kaplun
6
W końcu znalazłem problem. Ponieważ nie wiedziałem, że Permalink będzie wymagany do działania interfejsu API REST, pominąłem podczas wstępnej konfiguracji krok do ustawienia AllowOverride Allw <Directory "/var/www/html">sekcji /etc/httpd/conf/httpd.conf. Dlatego ignorował moje zmiany w .htaccess. Teraz z permalinkiem innym niż PLain, punkty końcowe interfejsu API REST działają.
Pep
11

Miałem również 4.7, że interfejs API REST został wyłączony, ale URL mnie oszukał. Aby zobaczyć poprawny adres URL, wyszukaj wiersz wyglądający mniej więcej tak:

link rel = ' https://api.w.org/' href = ' http://mysite?rest_route=/' />. Tak więc użycie http: // mysite? Rest_route = / jako prefiksu rozwiązało mój problem. Na przykład, aby odzyskać posty wystarczy wpisać: http: // mysite? Rest_route = / wp / json

Nie mogłem znaleźć w dokumentacji, że parametr zapytania był potrzebny. Czy byłem jedyny?

Edward
źródło
Pracował dla mnie z wordpress 4.8.x Nie jestem pewien, dlaczego nie jest to nigdzie udokumentowane.
Anirudha
2
Nie tylko ten. Znalazłem tę odpowiedź w komentarzu dopiero po 10 minutach wyszukiwania. Konieczne do wykonania:www.example.com?rest_route=/wp/v2/posts
Eugene K
3
Myślę, że dzieje się tak, gdy ładne permalinki nie są włączone. Z dokumentów ... ”W witrynach bez ładnych bezpośrednich linków trasa jest zamiast tego dodawana do adresu URL jako parametr rest_route. W powyższym przykładzie pełny adres URL to wtedy example.com/?rest_route=/wp/v2/posts / 123 "
Giles Butler,
1

Widzę, że rozwiązałeś problem, ale pozostawiłeś tutaj moje rozwiązanie, ponieważ zadziałało również dla mnie. Miałem ten sam problem podczas aktualizacji z wersji beta15 do podstawowego interfejsu API w WP 4.7. Okazało się, że miałem kilka wtyczek, które używały przestarzałej funkcji register_api_field, którą zmieniłem na register_rest_field zgodnie z tą uwagą w dzienniku zmian:

ZŁAMANIE ZMIANY: Zmień nazwę register_api_field () na register_rest_field ().

Wprowadza funkcję register_api_field () dla wstecznej zgodności, która wywołuje _doing_it_wrong (). Jednak register_api_field () nigdy nie zostanie przypisany do rdzenia WordPress, dlatego powinieneś zaktualizować swoje wywołania funkcji.

przyjazny ogień
źródło
1

Jeśli interfejs API REST nie działa od razu po instalacji lub po nowej instalacji i po wpisaniu

mydomain/wp-json/wp/v2/posts 

wtedy musisz po prostu aktywować swoje „bezpośrednie linki” jako nazwę post_name:

Pulpit nawigacyjny WP-> Ustawienia-> Permalinks

Lub jeśli nie chcesz aktywować bezpośrednich łączy, możesz po prostu wpisać:

mydomain?rest_route=/wp/v2/posts

Człowieku, chciałbym, żeby WordPress zaktualizował swój podręcznik Rest, aby był bardziej przyjazny dla użytkownika. Podoba mi się stara wersja dokumentów :)

samjco
źródło