Skip to content

REST API: Custom Route (URL) & Raw JSON Data

Kenapa Buat Custom URL?

4 alasan utama:

  1. Custom search logic — WordPress default search tidak aware terhadap relationships antar post types
  2. Less data — Kirim hanya data yang dibutuhkan (title, permalink) bukan seluruh post data
  3. Single request — 1 URL untuk semua post types, bukan 6 URL terpisah
  4. 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():

ParameterContohPenjelasan
Namespace'university/v1'Prefix unik untuk URL (hindari wp yang sudah dipakai core)
Route'search'Bagian akhir URL
Optionsarray(...)Konfigurasi: methods + callback

URL Hasil:

https://fictional-university.local/wp-json/university/v1/search

Tentang Namespace:

  • wp/v2 = namespace default WordPress core
  • university/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:

  1. WP_Query — query posts dari database
  2. array_push($array, $value) — tambah item ke akhir array
  3. While loop — loop setiap post, push data ke array
  4. Associative array — hanya include property yang dibutuhkan (title, permalink)
  5. 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=biology dari URL
  • sanitize_text_field() = WAJIB untuk keamanan (mencegah malicious input)

URL dengan Parameter:

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

Catatan Keamanan:

WordPress sudah punya security checks sendiri saat search, tapi selalu sanitize input dari user dengan sanitize_text_field().