Próbuję utworzyć interfejsy API REST dla mojej witryny Wordpress, która jest używana do wyświetlania listy obiektów za pomocą wtyczki Wordpress Job Manager.
Zarejestrowałem swój niestandardowy post, taksonomie w \ plugins \ rest-api \ plugin.php.
poniżej API daje mi wszystkie oferty z domyślną odpowiedzią.
http: // localhost / sports / wp-json / wp / v2 / joblisting /
Chciałem dodać meta post do odpowiedzi JSON przy użyciu poniższego kodu.
function slug_register_phone_number() {
register_rest_field( 'job_listing',
'phone',
array(
'get_callback' => 'slug_get_phone_number',
'update_callback' => null,
'schema' => null,
)
);
}
function slug_get_phone_number($post, $field_name, $request) {
return get_post_meta($post->id, '_phone' );
}
}
Korzystając z powyższego kodu, mogę dodać „telefon” jako odpowiedź REST, ale zawsze otrzymuję telefon = false w odpowiedzi. Nie wyświetla poprawnych danych z tabeli wp_postmeta.
Skorzystałem z poniższych linków w celach informacyjnych.
http://v2.wp-api.org/extending/modifying/
Podłącz szczegóły. 1. WP Job manager 2. rest-api
Każda pomoc będzie naprawdę pomocna.
źródło
Odpowiedzi:
$post
w funkcji zwrotnej jest tablica, a nie obiekt. Więc nie możesz użyć$post->id
. Zmień to na$post['id']
i powinno działać:Polecam zmienić
_phone
naphone_number
lub coś innego bez prefiksu podkreślenia. Ponieważ_
jest często używany z prywatnymi kluczami meta. Spróbuj dodać niestandardowe pole, które ma meta-klucz z_
prefiksem bezpośrednio do swojego posta, zobaczysz, co miałem na myśli.źródło
WP API ma
rest_prepare_post
filtr (lubrest_prepare_CPT
jeśli pracujesz z niestandardowymi postami), którego możesz użyć do zmodyfikowania odpowiedzi JSON. W twoim przypadku tak będzierest_prepare_joblisting
.Za pomocą tego samego filtra można także usunąć pola / dane z odpowiedzi i dowolnie manipulować danymi.
źródło
Wystarczy dodać te metody do function.php
źródło
Oto przykład OOP:
źródło