Skip to content

REST API: Add New Custom Field

Tujuan

Menambahkan property/field baru ke JSON data yang dikembalikan oleh WordPress REST API default.

Contoh Kasus: Menambahkan authorName

Default REST API hanya memberi author berupa ID numerik. Kita ingin menambahkan nama author yang bisa dibaca manusia.

Langkah: register_rest_field() di functions.php

php
// functions.php — di bagian atas

add_action('rest_api_init', 'university_custom_rest');

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

Penjelasan 3 Parameter register_rest_field():

  1. 'post' — post type yang ingin dikustomisasi (bisa 'page', 'professor', dll.)
  2. 'authorName' — nama field/property baru yang akan muncul di JSON
  3. array('get_callback' => function) — function yang mengembalikan nilai field

Hasil di JSON:

json
{
  "id": 65,
  "title": { "rendered": "Biology is Cool" },
  "authorName": "Brad",
  ...
}

Bisa Tambah Banyak Field

php
function university_custom_rest() {
  register_rest_field('post', 'authorName', array(
    'get_callback' => function() { return get_the_author(); }
  ));
  
  // Tambah field lain jika perlu:
  register_rest_field('post', 'perfectlyCroppedImageUrl', array(
    'get_callback' => function() {
      return get_the_post_thumbnail_url(0, 'professorLandscape');
    }
  ));
}

Apapun yang bisa di-achieve dengan PHP (ACF values, cropped images, custom queries) bisa dikembalikan sebagai value di REST API.

Menggunakan di JavaScript (Search.js)

js
// Di dalam .map() loop:
${combinedResults.map(item => `
  <li>
    <a href="${item.link}">${item.title.rendered}</a>
    ${item.type == 'post' ? ` by ${item.authorName}` : ''}
  </li>
`).join('')}

Ternary untuk Post Type Check:

  • item.type == 'post' → tampilkan "by authorName"
  • Selain post (misalnya page) → tampilkan string kosong
  • Property type sudah ada di default REST API JSON