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?


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


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?


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.


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 :)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.