Zaczynam trochę z interfejsem API REST. Jeśli nie jestem całkowicie wprowadzony w błąd, init
chwytak akcji jest również wykonywany, gdy jest to żądanie interfejsu API REST. Teraz chcę wykonać tylko część kodu, gdy nie jest to żądanie interfejsu API REST.
Więc szukałem polecenia takiego is_rest()
, aby zrobić coś takiego
<?php
if( ! is_rest() ) echo 'no-rest-request';
?>
Ale nie mogłem znaleźć czegoś takiego. Czy jest coś takiego is_rest()
?
init
. Pamiętaj również, że części interfejsu API mogą być używane wewnętrznie w żądaniach, które nie są żądaniami REST, więc ryzykujesz uszkodzenie czegoś, jeśli polegasz na tym wykryciu.Odpowiedzi:
To dobry punkt @Milo,
REST_REQUEST
stała jest zdefiniowana jakotrue
, w obrębierest_api_loaded()
jeśli$GLOBALS['wp']->query_vars['rest_route']
jest niepuste.Jest podłączona do
parse_request
urządzeń:ale
parse_request
strzela później niżinit
- patrz na przykład Kodeks tutaj .Było sugestia (Daniel Bachhuber) w bilety # 34373 czasowo
WP_Query::is_rest()
, ale została przełożona / anulowana.źródło
wp_is_rest_request()
lubwp_doing_rest()
.Natknąłem się na ten sam problem i napisałem prostą funkcję,
is_rest
która pozwala sprawdzić, czy bieżące żądanie jest żądaniem API WP REST.Bibliografia:
źródło
Aby rozwiązać ten problem, napisałem prostą funkcję niestandardową opartą na założeniu, że jeśli żądany identyfikator URI mieści się pod adresem URL interfejsu API Rest witryny WordPress, oznacza to, że jest to żądanie interfejsu API Rest.
Ta funkcja nie określa, czy jest to prawidłowy punkt końcowy, czy jest uwierzytelniony. Pytanie brzmi: czy adres URL jest potencjalnym adresem URL interfejsu API usługi Rest?
Jeśli twoje pole
$_SERVER['REQUEST_URI']
nie jest odpowiednio wypełnione, funkcja ta powrócifalse
, niezależnie od tego.Adres URL nie jest kodowany na stałe, więc jeśli z jakiegoś powodu zmienisz bazę URL interfejsu API, dostosuje się on.
źródło
Może nie w porządku, ale skończyło się
Daj mi znać, jeśli to nie w porządku. Próba stworzenia pomocnego startera dla wtyczek, aby w końcu udostępnić: https://gitlab.com/ripp.io/wordpress/plugin-starter
źródło
Dwie opcje tutaj naprawdę,
REST_REQUEST
jest zdefiniowane.rest_api_init
miejscu, w którym chciałeś się zaczepićinit
.źródło
Oto, co wymyśliłem:
parse_request
Jednak nie miałem zbyt wiele czasu na zastanowienie się, czy CLI wykrywa żądania REST przed uruchomieniem akcji. Jestem otwarty na sugestie!Mam jeszcze napisać kilka testów dotyczących tej funkcji, zaktualizuję tę odpowiedź, kiedy to zrobię.
-- Edytować
Właśnie odkryłem, jak WooCommerce sobie z tym radzi. WooCommerce nie wydaje się uwzględniać zwykłych bezpośrednich linków:
źródło