Azért jó fullstack fejlesztőnek lenni, mert mindenből kapsz egy kicsit. Imádom ezt a munkát, mert változatos, minden nap új kihívással. A mai menü egy meglévő WordPress REST API bővítés. A feladat csak annyi, hogy egy már létező szabvány WordPress REST API végponthoz egy új mezőt kellett létrehoznom.
Akit a WordPress saját REST API-ja érdekel, az itt mindent megtud róla. Aki nem tudja, mi az a REST, az pedig innen induljon, vagy esetleg a Wikipedia oldalon. Röviden egy olyan egységes interfész, amelynek különböző elveknek és követelményeknek kell megfelelnie, nekünk fejlesztőknek pedig alkalmazkodnunk kell hozzá. Ez jó, mert így egy elfogadott szabványhoz kell programozni, amit mindenki (el)ismer.
A lényeg, hogy most egy Cikk / Bejegyzés (post) részletes végpontjába fogunk beszúrni plusz mezőt. Mihez is kell ez? Például alkalmazásfejlesztéshez, vagy bármilyen olyan külső alkalmazásokhoz, ami REST-alapon működik és JSON-ban várja az adatokat, majd azt dolgozza fel.
A cikk részletes WordPress REST API URL alapértelmezett URL-je a következő (nyilván a https://domain.hu az a te weboldalad tetszőlegesen behelyettesíthető URL-je), a 999 pedig a post_id (bejegyzésed WordPress-ben tárolt egyedi azonosítója) jelöli:
https://domain.hu/wp-json/wp/v2/posts/999
Ide akarunk egy plusz mezőt, mondjuk a szerző nevét. Alapból ugyanis csak a szerző (author) user_id-ja szerepel itt, de miért ne szeretnénk egyből a szerző nevét megjeleníteni? Abból is mondjuk a display_name részben beállított értéket. Nyilván ez tetszőlegesen változtatható, bővíthető. Az én megoldásom:
add_action( 'rest_api_init', 'exibio_register_custom_field' );
function exibio_register_custom_field() {
// Register author_name field
register_rest_field( 'post', 'author_name',
array(
'get_callback' => 'get_author_name',
'show_in_rest' => true,
'auth_callback' => 'permission_check',
)
);
function get_author_name( $post, $field_name, $request ) {
$post_id = (int) $post['id'];
$user_id = (int) $post['author']; // author user_id
$author = get_userdata( $user_id ); // author object
$user_name = (string) $author->display_name;
return $user_name;
}
}
Először inicializáljuk a rest_api_init nevű hook-ot, majd hozzáadunk egy új author_name
nevű mezőt (ezen a néven fogjuk megtalálni a /v2/posts végpontban lévő JSON-ban) és végül megmondjuk, hogy az új mezőben mi szerepeljen. (get_author_name nevű függvény). A függvény a felhasználó nevével fog visszatérni (azon belül is a display_name, azaz a Nyilvánosan megjelenő névvel), ami a WordPress-ből már ismert user object-ből származik.
Rövid és eredményes kódolást!