Skip to content

Ikhtisar Chapter 14: Customizing REST API ​

Apa yang Dipelajari? ​

Menyesuaikan WordPress REST API — menambah field baru, membuat custom URL (route), mengirim data terorganisir per post type, dan membangun search yang aware terhadap relasi antar konten.

Poin Utama ​

1. Menambah Field Baru ke REST API ​

Gunakan register_rest_field() untuk menyisipkan property tambahan di JSON response:

php
register_rest_field('post', 'authorName', array(
  'get_callback' => function() { return get_the_author(); }
));

Apapun yang bisa diakses PHP (ACF values, cropped images, dll.) bisa dijadikan field REST API.

2. Membuat Custom Route (URL Sendiri) ​

Alih-alih menggunakan URL bawaan WordPress (/wp/v2/posts), buat URL sendiri:

php
register_rest_route('university/v1', 'search', array(
  'methods'  => WP_REST_Server::READABLE,
  'callback' => 'university_search_results'
));

Hasilnya: /wp-json/university/v1/search?term=biology

Keuntungan Custom RoutePenjelasan
1 request vs 6Semua post type dalam 1 URL
Data lebih ringanHanya kirim property yang dibutuhkan
Custom search logicBisa handle relasi antar post type
PHP auto → JSONReturn array PHP, WordPress konversi otomatis

3. Organisasi JSON per Post Type ​

Callback function membangun sub-arrays terpisah (generalInfo, professors, programs, events, campuses) — setiap post type bisa punya property berbeda sesuai kebutuhan tampilan.

JavaScript menerima 1 JSON response terstruktur, lalu merender layout 3 kolom:

  • Kolom 1: General Info (posts + pages)
  • Kolom 2: Programs + Professors (dengan foto)
  • Kolom 3: Campuses + Events (dengan tanggal circle)

Setiap section punya "no result" message sendiri dan link ke halaman arsip.

5. Search yang Aware Relasi (Relationship-Aware) ​

Masalah: search "biology" tidak menampilkan professor yang mengajar Biology karena relasi ada di ACF field, bukan di title/content.

Solusi — 2 tahap query:

  1. Main query — cari semua post type berdasarkan keyword
  2. Relationship query — dari program ID yang ditemukan, cari professor/event yang memiliki related_programs LIKE ID tersebut
php
foreach ($results['programs'] as $item) {
  array_push($programsMetaQuery, array(
    'key' => 'related_programs', 'compare' => 'LIKE', 'value' => '"' . $item['id'] . '"'
  ));
}

Gunakan array_unique() + array_values() untuk menghapus duplikat.

6. Menghindari False Positive ​

Pindahkan konten program dari default editor ke ACF WYSIWYG field (main_body_content), lalu hapus 'editor' dari CPT supports. WordPress search ('s') tidak menelusuri ACF field — sehingga keyword di body content tidak memicu relasi palsu.

7. Sanitasi & Keamanan ​

Selalu gunakan sanitize_text_field($data['term']) saat menerima input dari URL parameter — mencegah serangan injection.

8. Bonus: jQuery-Free dengan Axios ​

$.getJSON() bisa diganti axios.get() + async/await untuk bundle JS lebih kecil tanpa jQuery.

Satu Kalimat ​

Custom REST API route memungkinkan satu request JSON mengembalikan data terorganisir dari semua post type, termasuk relasi antar konten yang tidak bisa ditangani search bawaan WordPress.