REST API: Custom Route (URL) & Raw JSON Data
Kenapa Buat Custom URL?
4 alasan utama:
- Custom search logic — WordPress default search tidak aware terhadap relationships antar post types
- Less data — Kirim hanya data yang dibutuhkan (title, permalink) bukan seluruh post data
- Single request — 1 URL untuk semua post types, bukan 6 URL terpisah
- PHP practice — Latihan membangun data structures dengan PHP
Membuat Custom Route
Step 1: Buat File Terpisah (Opsional, untuk Organisasi)
php
// functions.php — di bagian atas
require get_theme_file_path('/inc/search-route.php');Buat folder inc/ di dalam theme folder, lalu buat file search-route.php.
Step 2: Register Route di search-route.php
php
<?php
add_action('rest_api_init', 'university_register_search');
function university_register_search() {
register_rest_route('university/v1', 'search', array(
'methods' => WP_REST_Server::READABLE,
'callback' => 'university_search_results'
));
}
function university_search_results($data) {
return 'Congratulations, you created a route.';
}Penjelasan 3 Parameter register_rest_route():
| Parameter | Contoh | Penjelasan |
|---|---|---|
| Namespace | 'university/v1' | Prefix unik untuk URL (hindari wp yang sudah dipakai core) |
| Route | 'search' | Bagian akhir URL |
| Options | array(...) | Konfigurasi: methods + callback |
URL Hasil:
https://fictional-university.local/wp-json/university/v1/searchTentang Namespace:
wp/v2= namespace default WordPress coreuniversity/v1= namespace custom kita- Selalu include versi (
v1) agar aman jika nanti ada perubahan besar
Methods:
WP_REST_Server::READABLE= GET request (paling aman/portable)- Sesuai dengan Read di CRUD
Membuat Raw JSON Data
PHP Otomatis Dikonversi ke JSON oleh WordPress
php
function university_search_results($data) {
// PHP array → otomatis jadi JSON array
return array('red', 'orange', 'yellow');
// Hasil: ["red","orange","yellow"]
// PHP associative array → otomatis jadi JSON object
return array('cat' => 'meow', 'dog' => 'bark');
// Hasil: {"cat":"meow","dog":"bark"}
}Tidak perlu stress soal JSON syntax — tulis PHP biasa, WordPress handle konversinya.
Menggunakan WP_Query untuk Return Post Data
php
function university_search_results($data) {
$professors = new WP_Query(array(
'post_type' => 'professor'
));
$professorResults = array();
while ($professors->have_posts()) {
$professors->the_post();
array_push($professorResults, array(
'title' => get_the_title(),
'permalink' => get_the_permalink()
));
}
return $professorResults;
}Penjelasan:
WP_Query— query posts dari databasearray_push($array, $value)— tambah item ke akhir array- While loop — loop setiap post, push data ke array
- Associative array — hanya include property yang dibutuhkan (title, permalink)
- Return array → WordPress convert ke JSON otomatis
Keuntungan Custom Array:
Dibanding return $professors->posts (yang berisi SEMUA data per post), kita hanya kirim property yang dibutuhkan → lebih ringan, lebih cepat.
Keyword Search dengan Parameter URL
Argument 's' di WP_Query
php
$professors = new WP_Query(array(
'post_type' => 'professor',
's' => sanitize_text_field($data['term'])
));'s'= search argument (S stands for Search)$data= parameter dari WordPress yang berisi URL query parameters$data['term']= mengakses?term=biologydari URLsanitize_text_field()= WAJIB untuk keamanan (mencegah malicious input)
URL dengan Parameter:
/wp-json/university/v1/search?term=biologyCatatan Keamanan:
WordPress sudah punya security checks sendiri saat search, tapi selalu sanitize input dari user dengan
sanitize_text_field().