Skip to content

Glosarium Function WordPress

Kumpulan semua function bawaan WordPress yang dibahas di seluruh chapter, dikelompokkan berdasarkan chapter pertama kali muncul. Setiap function hanya muncul satu kali — di chapter pertama ia diperkenalkan.

Total: 134 function unik dari Chapter 3 – Chapter 29.


Chapter 3 — WordPress Specific PHP

have_posts()

Mengecek apakah masih ada post yang tersedia untuk ditampilkan di dalam WordPress Loop. Return true atau false.

php
<?php while (have_posts()) {
  the_post(); ?>
  <h2><?php the_title(); ?></h2>
<?php } ?>

the_post()

Mempersiapkan data post berikutnya agar bisa diakses oleh function template lainnya (seperti the_title(), the_content(), dll). Wajib dipanggil di setiap iterasi loop.

php
<?php while (have_posts()) {
  the_post();
  // sekarang the_title(), the_content() dll merujuk ke post ini
} ?>

the_title()

Menampilkan (echo) judul post atau page yang sedang aktif di loop.

php
<h2><?php the_title(); ?></h2>

the_content()

Menampilkan (echo) seluruh isi konten post atau page yang sedang aktif di loop.

php
<div class="entry-content">
  <?php the_content(); ?>
</div>

Menampilkan (echo) URL lengkap (permalink) dari post/page yang sedang aktif di loop.

php
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>

get_header()

Memuat file header.php dari folder theme. Digunakan untuk menyertakan bagian <head> dan navigasi atas.

php
<?php get_header(); ?>
<!-- konten halaman di sini -->
<?php get_footer(); ?>

Memuat file footer.php dari folder theme. Biasanya berisi penutup </body> dan script footer.

php
<?php get_header(); ?>
<!-- konten halaman di sini -->
<?php get_footer(); ?>

Menampilkan semua CSS, JavaScript, dan meta tag yang telah di-enqueue oleh WordPress, theme, dan plugin di bagian <head>. Wajib ada sebelum </head>.

php
<head>
  <?php wp_head(); ?>
</head>

Menampilkan semua script yang perlu dimuat sebelum penutup </body>. Wajib ada sebelum </body>.

php
  <?php wp_footer(); ?>
</body>
</html>

wp_enqueue_style()

Mendaftarkan dan memuat file CSS ke halaman secara aman. Dipanggil melalui hook wp_enqueue_scripts.

php
function university_files() {
  wp_enqueue_style('university_main_styles', get_stylesheet_uri());
  wp_enqueue_style('custom-google-fonts', '//fonts.googleapis.com/css?family=Roboto');
}
add_action('wp_enqueue_scripts', 'university_files');

wp_enqueue_script()

Mendaftarkan dan memuat file JavaScript ke halaman secara aman. Parameter ketiga adalah array dependency.

php
function university_files() {
  wp_enqueue_script('main-university-js', get_theme_file_uri('/js/scripts-bundled.js'), NULL, '1.0', true);
}
add_action('wp_enqueue_scripts', 'university_files');

get_stylesheet_uri()

Return URL lengkap ke file style.css milik theme yang aktif. Biasanya dipakai bersama wp_enqueue_style().

php
wp_enqueue_style('university_main_styles', get_stylesheet_uri());

get_theme_file_uri()

Return URL lengkap ke file apapun di dalam folder theme aktif. Bisa untuk JS, CSS, gambar, dll.

php
wp_enqueue_script('main-university-js', get_theme_file_uri('/js/scripts-bundled.js'), NULL, '1.0', true);

add_action()

Menambahkan (mendaftarkan) sebuah function ke hook/action WordPress tertentu. Ini adalah cara utama "menyambungkan" kode kita ke sistem WordPress.

php
// Parameter: nama hook, nama function, [prioritas], [jumlah argumen]
add_action('wp_enqueue_scripts', 'university_files');
add_action('after_setup_theme', 'university_features');
add_action('pre_get_posts', 'university_adjust_queries');

Chapter 4 — Pages

add_theme_support()

Mengaktifkan fitur bawaan WordPress di theme, seperti title-tag, post-thumbnails, menus, dll. Dipanggil melalui hook after_setup_theme.

php
function university_features() {
  add_theme_support('title-tag');
  add_theme_support('post-thumbnails');
}
add_action('after_setup_theme', 'university_features');

get_the_title()

Return judul post/page saat ini tanpa langsung echo. Berguna saat perlu menyimpan judul ke variabel atau memanipulasinya.

php
$judul = get_the_title();
echo '<h2>' . $judul . '</h2>';

the_ID()

Menampilkan (echo) ID numerik dari post/page yang sedang aktif di loop.

php
<div id="post-<?php the_ID(); ?>">
  <?php the_content(); ?>
</div>

get_the_ID()

Return ID numerik dari post/page saat ini tanpa echo. Berguna untuk dimasukkan ke variabel atau parameter function lain.

php
$currentId = get_the_ID();
$parentId = wp_get_post_parent_id($currentId);

get_pages()

Mengambil array halaman (pages) dari database berdasarkan parameter yang diberikan, seperti child_of.

php
$children = get_pages(array(
  'child_of' => get_the_ID()
));

if (count($children) > 0) {
  echo 'Halaman ini punya sub-halaman!';
}

wp_list_pages()

Menampilkan daftar halaman sebagai <li> HTML, dengan opsi seperti filter berdasarkan parent, sort order, dan format judul.

php
wp_list_pages(array(
  'title_li' => NULL,
  'child_of' => $theParent,
  'sort_column' => 'menu_order'
));

site_url()

Return URL utama site WordPress. Sering dipakai untuk membuat link ke halaman internal.

php
<a href="<?php echo site_url('/blog'); ?>">Lihat Blog</a>
<a href="<?php echo site_url('/about-us'); ?>">Tentang Kami</a>

Return URL permalink dari post/page tertentu tanpa echo. Bisa menerima post ID sebagai parameter.

php
$link = get_permalink();              // permalink post saat ini
$link = get_permalink(42);            // permalink post ID 42
echo '<a href="' . $link . '">Baca</a>';

language_attributes()

Menampilkan atribut bahasa untuk tag <html>, misalnya lang="en-US". Penting untuk aksesibilitas dan SEO.

php
<html <?php language_attributes(); ?>>

bloginfo()

Menampilkan (echo) informasi dasar tentang site, seperti nama, deskripsi, URL, dll.

php
<meta charset="<?php bloginfo('charset'); ?>">
<title><?php bloginfo('name'); ?></title>

body_class()

Menampilkan CSS class secara otomatis pada tag <body> — termasuk info halaman, post type, status login, dll. Sangat berguna untuk styling.

php
<body <?php body_class(); ?>>

is_page()

Mengecek apakah halaman yang sedang dilihat adalah page tertentu. Bisa menerima slug, ID, atau title sebagai parameter.

php
<?php if (is_page('about-us')) : ?>
  <p>Ini halaman About Us!</p>
<?php endif; ?>

wp_get_post_parent_id()

Return ID parent dari post/page tertentu. Return 0 jika tidak punya parent. Sangat berguna untuk mendeteksi hierarki page.

php
$theParent = wp_get_post_parent_id(get_the_ID());

if ($theParent) {
  // Ini adalah child page, parent ID-nya: $theParent
} else {
  // Ini bukan child page (top-level)
}

register_nav_menu()

Mendaftarkan lokasi menu navigasi baru agar bisa dikelola dari admin area (Appearance → Menus).

php
function university_features() {
  register_nav_menu('headerMenuLocation', 'Header Menu Location');
  register_nav_menu('footerLocationOne', 'Footer Location One');
}
add_action('after_setup_theme', 'university_features');

Menampilkan menu WordPress yang sudah didaftarkan di template. Menerima array parameter termasuk theme_location.

php
wp_nav_menu(array(
  'theme_location' => 'headerMenuLocation'
));

Chapter 5 — Building Blog Section

the_excerpt()

Menampilkan (echo) cuplikan singkat dari konten post. WordPress otomatis memotong konten menjadi ~55 kata.

php
<div class="post-summary">
  <?php the_excerpt(); ?>
</div>

Menampilkan nama author sebagai link yang menuju ke halaman archive author tersebut.

php
<p>Posted by <?php the_author_posts_link(); ?></p>

the_time()

Menampilkan tanggal/waktu posting dengan format yang bisa dikustomisasi. Parameter format mengikuti konvensi PHP date.

php
<p>Diposting pada <?php the_time('d F Y'); ?></p>
<!-- Output: Diposting pada 25 Januari 2024 -->

<span><?php the_time('n.j.y'); ?></span>
<!-- Output: 1.25.24 -->

get_the_category_list()

Return daftar kategori dari post saat ini sebagai HTML link, dengan separator yang bisa ditentukan.

php
<p>Kategori: <?php echo get_the_category_list(', '); ?></p>
<!-- Output: Kategori: Awards, News -->

WP_Query (class)

Class untuk membuat custom database query yang terpisah dari main query WordPress. Sangat powerful untuk menampilkan post spesifik.

php
$homepagePosts = new WP_Query(array(
  'posts_per_page' => 2,
  'post_type' => 'post'
));

while ($homepagePosts->have_posts()) {
  $homepagePosts->the_post(); ?>
  <h2><?php the_title(); ?></h2>
  <p><?php echo wp_trim_words(get_the_content(), 18); ?></p>
<?php }
wp_reset_postdata();

wp_trim_words()

Memotong teks menjadi jumlah kata tertentu. Parameter pertama adalah teks, parameter kedua adalah jumlah kata.

php
echo wp_trim_words(get_the_content(), 18);
// Output: 18 kata pertama dari konten post...

get_the_content()

Return seluruh isi konten post saat ini tanpa echo. Berguna saat perlu dimanipulasi (trim, filter, dll) sebelum ditampilkan.

php
$konten = get_the_content();
echo wp_trim_words($konten, 20);

wp_reset_postdata()

Mengembalikan global $post ke kondisi semula setelah menjalankan custom WP_Query. Wajib dipanggil setelah setiap custom query loop selesai.

php
$myQuery = new WP_Query(array('post_type' => 'event'));
while ($myQuery->have_posts()) {
  $myQuery->the_post();
  the_title();
}
wp_reset_postdata(); // ← WAJIB!

get_post_type()

Return nama post type dari post yang sedang aktif (misalnya 'post', 'page', 'event').

php
if (get_post_type() == 'event') {
  echo 'Ini adalah event!';
}

Menampilkan navigasi halaman (pagination) untuk blog listing. Biasanya dikombinasikan dengan WP_Query.

php
echo paginate_links(array(
  'total' => $customQuery->max_num_pages
));

is_home()

Mengecek apakah halaman yang sedang dilihat adalah blog home (halaman yang menampilkan daftar post terbaru).

php
<?php if (is_home()) : ?>
  <h1>Blog</h1>
<?php endif; ?>

is_archive()

Mengecek apakah halaman yang sedang dilihat adalah halaman archive (category, tag, author, date, dll).

php
<?php if (is_archive()) : ?>
  <h1>Arsip</h1>
<?php endif; ?>

the_archive_title()

Menampilkan (echo) judul archive secara otomatis sesuai jenisnya — "Category: Awards", "Author: Brad", "Tag: News", dll.

php
<h1><?php the_archive_title(); ?></h1>

the_archive_description()

Menampilkan (echo) deskripsi yang sudah diisi untuk archive tersebut (misalnya deskripsi kategori dari admin).

php
<?php the_archive_description(); ?>

the_author()

Menampilkan (echo) nama author dari post yang sedang aktif di loop.

php
<p>Ditulis oleh: <?php the_author(); ?></p>

is_single()

Mengecek apakah halaman yang sedang dilihat adalah single post (bukan page, bukan listing). Return true/false.

php
<?php if (is_single()) : ?>
  <p>Kamu sedang membaca single post.</p>
<?php endif; ?>

Chapter 6 — Events Post Types

register_post_type()

Mendaftarkan custom post type baru (misalnya Event, Program, Professor). Dipanggil melalui hook init.

php
function university_post_types() {
  register_post_type('event', array(
    'public' => true,
    'labels' => array(
      'name' => 'Events',
      'add_new_item' => 'Add New Event',
      'singular_name' => 'Event'
    ),
    'menu_icon' => 'dashicons-calendar',
    'has_archive' => true,
    'rewrite' => array('slug' => 'events'),
    'supports' => array('title', 'editor', 'excerpt')
  ));
}
add_action('init', 'university_post_types');

get_the_excerpt()

Return excerpt (cuplikan) post tanpa echo. Lebih disukai daripada the_excerpt() karena tidak menambahkan tag <p> otomatis.

php
if (has_excerpt()) {
  echo get_the_excerpt();
} else {
  echo wp_trim_words(get_the_content(), 18);
}

has_excerpt()

Mengecek apakah post memiliki excerpt yang diisi secara manual di admin. Return true/false.

php
if (has_excerpt()) {
  echo get_the_excerpt();   // pakai excerpt manual
} else {
  echo wp_trim_words(get_the_content(), 18);  // fallback: potong konten
}

get_field()

Mengambil (return) nilai custom field dari plugin ACF (Advanced Custom Fields). Bisa menerima field name dan post ID.

⚠️ Ini function dari plugin ACF, bukan WordPress core.

php
$eventDate = get_field('event_date');

if ($eventDate) {
  echo 'Tanggal event: ' . $eventDate;
}

the_field()

Menampilkan (echo) nilai custom field ACF secara langsung.

⚠️ Ini function dari plugin ACF, bukan WordPress core.

php
<p>Lokasi: <?php the_field('event_location'); ?></p>

get_post_type_archive_link()

Return URL menuju halaman archive dari custom post type tertentu.

php
<a href="<?php echo get_post_type_archive_link('event'); ?>">Lihat Semua Event</a>
<a href="<?php echo get_post_type_archive_link('program'); ?>">Semua Program</a>

is_post_type_archive()

Mengecek apakah halaman yang sedang dilihat adalah archive dari custom post type tertentu.

php
if (is_post_type_archive('event')) {
  echo 'Ini halaman archive events!';
}

is_main_query()

Mengecek apakah query yang sedang berjalan adalah main query WordPress (bukan custom query). Sering dipakai di pre_get_posts.

php
function university_adjust_queries($query) {
  if (!is_admin() AND is_post_type_archive('event') AND $query->is_main_query()) {
    $query->set('orderby', 'meta_value');
    $query->set('meta_key', 'event_date');
  }
}
add_action('pre_get_posts', 'university_adjust_queries');

is_admin()

Mengecek apakah halaman yang sedang diakses adalah area admin WordPress (wp-admin). Return true/false.

php
if (!is_admin()) {
  // Kode ini hanya jalan di frontend, bukan di admin
}

add_filter()

Menambahkan function ke filter hook WordPress. Filter digunakan untuk memodifikasi data sebelum ditampilkan atau disimpan.

php
// Contoh: modifikasi konten post sebelum ditampilkan
add_filter('the_content', 'addRelatedPosts');

function addRelatedPosts($content) {
  if (is_single()) {
    $content .= '<h3>Related Posts</h3>';
  }
  return $content;
}

Chapter 8 — Professor Post Types

the_post_thumbnail()

Menampilkan (echo) tag <img> lengkap dari featured image post. Bisa menerima nama ukuran gambar sebagai parameter.

php
<?php the_post_thumbnail(); ?>
<?php the_post_thumbnail('professorPortrait'); ?>
<?php the_post_thumbnail('medium'); ?>

the_post_thumbnail_url()

Menampilkan (echo) hanya URL dari featured image. Cocok untuk dipakai di background-image CSS atau <img src=""> manual.

php
<img src="<?php the_post_thumbnail_url('professorLandscape'); ?>">

<div style="background-image: url(<?php the_post_thumbnail_url('pageBanner'); ?>)">
</div>

add_image_size()

Mendaftarkan ukuran gambar kustom baru. Saat gambar diupload, WordPress otomatis membuat versi dengan ukuran ini.

php
function university_features() {
  add_image_size('professorLandscape', 400, 260, true);  // crop
  add_image_size('professorPortrait', 480, 650, true);
  add_image_size('pageBanner', 1500, 350, true);
}
add_action('after_setup_theme', 'university_features');

⚠️ Gambar yang diupload sebelum add_image_size() ditambahkan perlu di-regenerate (plugin Regenerate Thumbnails).


Chapter 9 — Cleaner Code

get_template_part()

Memuat file template partial yang reusable. Berguna untuk memisahkan kode berulang ke file terpisah.

php
// Memuat file template-parts/content-event.php
get_template_part('template-parts/content', 'event');

// Memuat file template-parts/content.php
get_template_part('template-parts/content');

get_the_archive_title()

Return judul archive tanpa echo. Berguna saat perlu memasukkan judul sebagai argumen function lain.

php
pageBanner(array(
  'title' => get_the_archive_title(),
  'subtitle' => 'Lihat hasil berdasarkan kategori.'
));

Chapter 13 — REST API & AJAX

wp_localize_script()

Mengirim data dari PHP ke JavaScript dengan cara membuat variabel global JS. Sering dipakai untuk mengirim URL dan nonce.

php
wp_localize_script('main-university-js', 'universityData', array(
  'root_url' => get_site_url(),
  'nonce' => wp_create_nonce('wp_rest')
));

// Di JavaScript: universityData.root_url, universityData.nonce

get_site_url()

Return URL dasar site WordPress. Otomatis mengembalikan URL yang benar baik di lokal maupun di server produksi.

php
$url = get_site_url();
// Output: http://developer-flavor.developer

wp_create_nonce()

Membuat nonce (Number used ONCE) — token keamanan untuk melindungi request dari serangan CSRF.

php
// Membuat nonce
$nonce = wp_create_nonce('wp_rest');

// Mengirim ke JavaScript via wp_localize_script
wp_localize_script('main-js', 'siteData', array(
  'nonce' => wp_create_nonce('wp_rest')
));

Chapter 14 — Customizing REST API

register_rest_route()

Mendaftarkan custom REST API endpoint baru. Menentukan URL, method (GET/POST/DELETE), dan callback function.

php
add_action('rest_api_init', 'universityRegisterSearch');

function universityRegisterSearch() {
  register_rest_route('university/v1', 'search', array(
    'methods' => WP_REST_Server::READABLE,    // GET
    'callback' => 'universitySearchResults',
    'permission_callback' => '__return_true'
  ));
}

function universitySearchResults($data) {
  $query = new WP_Query(array(
    's' => sanitize_text_field($data['term'])
  ));
  return $query->posts;
}

sanitize_text_field()

Membersihkan input teks dari karakter berbahaya — menghapus tag HTML, encoding khusus, dan whitespace berlebih. Wajib untuk setiap input user.

php
$cleanInput = sanitize_text_field($data['term']);
$cleanTitle = sanitize_text_field($_POST['title']);

get_the_post_thumbnail_url()

Return URL featured image dari post tertentu (versi get_). Parameter pertama adalah post ID (0 = post saat ini), kedua adalah ukuran.

php
$imageUrl = get_the_post_thumbnail_url(0, 'professorLandscape');
$imageUrl = get_the_post_thumbnail_url(42, 'medium');

register_rest_field()

Menambahkan field/property kustom ke response JSON dari REST API bawaan WordPress.

php
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(); }
  ));
  
  register_rest_field('post', 'perfectlyCroppedImageUrl', array(
    'get_callback' => function() { return get_the_post_thumbnail_url(0, 'professorLandscape'); }
  ));
}

get_the_author()

Return nama author dari post yang sedang aktif tanpa echo. Berguna di REST API callbacks dan manipulasi string.

php
$authorName = get_the_author();
echo 'Ditulis oleh: ' . $authorName;

esc_url()

Membersihkan dan memvalidasi URL agar aman ditampilkan di HTML. Menghapus karakter berbahaya dan protokol tidak aman.

php
<a href="<?php echo esc_url(site_url('/events')); ?>">Events</a>
<a href="<?php echo esc_url(get_permalink()); ?>">Baca Selengkapnya</a>

esc_html()

Membersihkan output untuk ditampilkan sebagai teks HTML biasa. Mengkonversi karakter khusus (<, >, &, dll) menjadi HTML entities.

php
<h2><?php echo esc_html(get_the_title()); ?></h2>
<p><?php echo esc_html($userInput); ?></p>

get_search_query()

Return kata kunci pencarian yang diketik user saat ini. Berguna untuk menampilkan "Hasil pencarian untuk: ..." di halaman search.

php
<h1>Hasil Pencarian untuk: <?php echo esc_html(get_search_query()); ?></h1>

get_search_form()

Memuat file searchform.php dari folder theme. Berguna untuk menampilkan form pencarian yang reusable di mana saja.

php
<!-- Di sidebar, footer, atau halaman manapun -->
<?php get_search_form(); ?>

Chapter 17 — User Roles & Permission

is_user_logged_in()

Mengecek apakah visitor yang sedang mengakses situs sudah login atau belum. Return true/false.

php
<?php if (is_user_logged_in()) : ?>
  <a href="<?php echo wp_logout_url(); ?>">Log Out</a>
<?php else : ?>
  <a href="<?php echo wp_login_url(); ?>">Log In</a>
<?php endif; ?>

wp_logout_url()

Return URL untuk melakukan logout. Bisa menerima parameter redirect URL.

php
<a href="<?php echo wp_logout_url(); ?>">Log Out</a>
<a href="<?php echo wp_logout_url(site_url('/')); ?>">Log Out (redirect ke home)</a>

wp_login_url()

Return URL menuju halaman login WordPress.

php
<a href="<?php echo wp_login_url(); ?>">Log In</a>

wp_registration_url()

Return URL menuju halaman registrasi WordPress.

php
<a href="<?php echo wp_registration_url(); ?>">Daftar Akun Baru</a>

get_avatar()

Return tag <img> berisi avatar (Gravatar) dari user berdasarkan ID atau email. Parameter kedua adalah ukuran dalam pixel.

php
<?php echo get_avatar(get_current_user_id(), 60); ?>

get_current_user_id()

Return ID numerik dari user yang sedang login. Return 0 jika tidak ada user yang login.

php
$userId = get_current_user_id();

$myNotes = new WP_Query(array(
  'post_type' => 'note',
  'author' => $userId
));

wp_get_current_user()

Return object WP_User dari user yang sedang login, berisi semua data user (nama, email, role, dll).

php
$user = wp_get_current_user();
echo 'Halo, ' . $user->display_name;
echo 'Email: ' . $user->user_email;

wp_redirect()

Melakukan HTTP redirect ke URL yang ditentukan. Harus diikuti exit agar kode setelahnya tidak dieksekusi.

php
if (!is_user_logged_in()) {
  wp_redirect(site_url('/'));
  exit;
}

get_bloginfo()

Return informasi site (nama, URL, deskripsi, dll) tanpa echo. Versi return dari bloginfo().

php
$siteName = get_bloginfo('name');
$siteUrl = get_bloginfo('url');

Chapter 18 — User-Generated Content

esc_attr()

Membersihkan output untuk digunakan sebagai HTML attribute value. Mencegah XSS attack di dalam attribute.

php
<input type="text" value="<?php echo esc_attr($title); ?>">
<div data-id="<?php echo esc_attr(get_the_ID()); ?>">

wp_strip_all_tags()

Menghapus semua tag HTML dari string, menyisakan teks polos saja.

php
$cleanContent = wp_strip_all_tags(get_the_content());
echo esc_attr($cleanContent);

esc_textarea()

Membersihkan output khusus untuk ditampilkan di dalam elemen <textarea>. Mirip esc_html() tapi optimasi untuk textarea.

php
<textarea readonly><?php echo esc_textarea(wp_strip_all_tags(get_the_content())); ?></textarea>

sanitize_textarea_field()

Membersihkan input yang berasal dari <textarea>. Mempertahankan newline tapi menghapus tag HTML berbahaya.

php
$cleanBody = sanitize_textarea_field($_POST['note_body']);

count_user_posts()

Return jumlah total post yang dibuat oleh user tertentu. Bisa difilter berdasarkan post type.

php
$noteCount = count_user_posts(get_current_user_id(), 'note');

if ($noteCount >= 5) {
  echo 'Kamu sudah mencapai batas maksimum catatan!';
}

Chapter 19 — Like/Heart Count

wp_insert_post()

Membuat post baru secara programmatik. Menerima array berisi data post (title, content, type, status, author, dll).

php
wp_insert_post(array(
  'post_type' => 'like',
  'post_status' => 'publish',
  'post_title' => 'Like by User',
  'meta_input' => array(
    'liked_professor_id' => sanitize_text_field($professorId)
  )
));

wp_delete_post()

Menghapus post secara programmatik berdasarkan ID. Parameter kedua true = hapus permanen (bypass trash).

php
wp_delete_post($likeId, true);  // hapus permanen
wp_delete_post($noteId);         // pindahkan ke trash

get_post_field()

Return nilai dari satu field spesifik sebuah post (misalnya post_author, post_title, post_content).

php
$authorId = get_post_field('post_author', $likeId);

if ($authorId == get_current_user_id()) {
  // User ini memang pemilik post tersebut
}

Chapter 22 — Plugin Development PHP

add_options_page()

Menambahkan halaman baru di bawah menu Settings di admin WordPress.

php
add_options_page(
  'Word Count Settings',       // page title
  'Word Count',                // menu title
  'manage_options',            // capability
  'word-count-settings-page',  // slug
  'wcpSettingsHTML'            // callback function
);

register_setting()

Mendaftarkan setting baru ke WordPress Settings API. Ini menghubungkan option di database dengan form setting.

php
register_setting('wordcountplugin', 'wcp_location', array(
  'sanitize_callback' => 'sanitize_text_field',
  'default' => '0'
));

register_setting('wordcountplugin', 'wcp_headline', array(
  'sanitize_callback' => 'sanitize_text_field',
  'default' => 'Post Statistics'
));

add_settings_section()

Menambahkan section (kelompok) di halaman settings. Section menjadi wadah untuk beberapa fields yang terkait.

php
add_settings_section(
  'wcp_first_section',             // ID section
  null,                             // title section
  null,                             // callback (optional)
  'word-count-settings-page'       // page slug
);

add_settings_field()

Menambahkan field (input) individual di dalam section settings.

php
add_settings_field(
  'wcp_location',                   // ID field
  'Display Location',               // label
  'locationHTML',                    // callback untuk render HTML
  'word-count-settings-page',       // page slug
  'wcp_first_section'               // section ID
);

settings_fields()

Menampilkan hidden fields yang diperlukan oleh Settings API (nonce, action, option group). Wajib ada di dalam <form>.

php
<form action="options.php" method="POST">
  <?php settings_fields('wordcountplugin'); ?>
  <?php do_settings_sections('word-count-settings-page'); ?>
  <?php submit_button(); ?>
</form>

do_settings_sections()

Menampilkan semua section dan fields yang terdaftar untuk halaman settings tertentu.

php
<form action="options.php" method="POST">
  <?php settings_fields('wordcountplugin'); ?>
  <?php do_settings_sections('word-count-settings-page'); ?>
  <?php submit_button(); ?>
</form>

get_option()

Mengambil nilai option yang tersimpan di tabel wp_options database. Bisa diberi default value.

php
$location = get_option('wcp_location', '0');
$headline = get_option('wcp_headline', 'Post Statistics');

if (get_option('wcp_wordcount', '1')) {
  // tampilkan word count
}

update_option()

Menyimpan atau mengupdate nilai option di database. Jika option belum ada, akan dibuat otomatis.

php
update_option('my_plugin_version', '2.0');
update_option('wcp_location', sanitize_text_field($_POST['wcp_location']));

current_user_can()

Mengecek apakah user yang sedang login memiliki capability (kemampuan) tertentu. Penting untuk keamanan dan akses kontrol.

php
if (current_user_can('manage_options')) {
  // User ini adalah administrator
}

if (!current_user_can('edit_posts')) {
  wp_die('Kamu tidak punya izin!');
}

wp_nonce_field()

Menampilkan hidden input berisi nonce token di dalam form HTML. Melindungi form dari serangan CSRF.

php
<form method="post">
  <?php wp_nonce_field('my_action', 'my_nonce_field'); ?>
  <input type="text" name="title">
  <button type="submit">Simpan</button>
</form>

wp_verify_nonce()

Memverifikasi nonce token yang dikirim dari form. Return false jika nonce tidak valid atau sudah expired.

php
if (!wp_verify_nonce($_POST['my_nonce_field'], 'my_action')) {
  wp_die('Nonce tidak valid!');
}
// Lanjutkan proses form...

add_menu_page()

Menambahkan halaman menu utama (top-level) di sidebar admin WordPress.

php
add_menu_page(
  'Word Filter',              // page title
  'Word Filter',              // menu title
  'manage_options',           // capability
  'wordfilter',               // slug
  'wordFilterPage',           // callback
  'dashicons-smiley',         // icon
  100                          // posisi
);

add_submenu_page()

Menambahkan sub-menu di bawah menu utama yang sudah ada di admin.

php
add_submenu_page(
  'wordfilter',               // parent slug
  'Words To Filter',          // page title
  'Words To Filter',          // menu title
  'manage_options',           // capability
  'words-to-filter',          // slug
  'wordsSubPage'              // callback
);

__()

Return text yang sudah diterjemahkan (internationalization). Parameter kedua adalah text domain plugin/theme.

php
$text = __('Hello World', 'my-plugin');
echo $text;

_e()

Menampilkan (echo) text yang sudah diterjemahkan. Shortcut dari echo __().

php
<h1><?php _e('Settings Page', 'my-plugin'); ?></h1>
<p><?php _e('Configure your options below.', 'my-plugin'); ?></p>

esc_html__()

Return text terjemahan yang sudah di-escape untuk HTML. Kombinasi esc_html() + __().

php
$safeText = esc_html__('User Input Title', 'my-plugin');
echo '<h2>' . $safeText . '</h2>';

esc_html_e()

Menampilkan (echo) text terjemahan yang sudah di-escape HTML. Kombinasi esc_html() + _e().

php
<label><?php esc_html_e('Display Location', 'my-plugin'); ?></label>

plugin_dir_url()

Return URL lengkap menuju folder plugin saat ini. Biasanya dipakai untuk path ke file JS/CSS plugin.

php
wp_enqueue_script('my-plugin-js', plugin_dir_url(__FILE__) . 'build/index.js');
wp_enqueue_style('my-plugin-css', plugin_dir_url(__FILE__) . 'build/index.css');

selected()

Helper WordPress untuk menambahkan atribut selected="selected" pada <option> yang cocok. Membuat kode dropdown lebih bersih.

php
<select name="wcp_location">
  <option value="0" <?php selected(get_option('wcp_location'), '0') ?>>Beginning of post</option>
  <option value="1" <?php selected(get_option('wcp_location'), '1') ?>>End of post</option>
</select>

checked()

Helper WordPress untuk menambahkan atribut checked="checked" pada checkbox. Mirip selected() tapi untuk checkbox.

php
<input type="checkbox" name="wcp_wordcount" value="1" 
  <?php checked(get_option('wcp_wordcount'), '1') ?>>

Chapter 23 — Plugin Development Blocks

register_block_type()

Mendaftarkan custom block type baru untuk Gutenberg editor. Menghubungkan script JS (editor) dengan render di frontend.

php
register_block_type('ourplugin/banner', array(
  'editor_script' => 'newBlockScript',
  'render_callback' => 'bannerRenderCallback'
));

wp_register_script()

Mendaftarkan file JavaScript tanpa langsung memuatnya. Script hanya dimuat saat dibutuhkan (misalnya oleh block).

php
wp_register_script(
  'newBlockScript',
  plugin_dir_url(__FILE__) . 'build/index.js',
  array('wp-blocks', 'wp-element', 'wp-editor')
);

💡 Bedanya dengan wp_enqueue_script(): register hanya mendaftarkan, enqueue langsung memuat. Untuk block, pakai register agar hanya dimuat di halaman yang memakainya.


ob_start()

Memulai output buffering PHP. Semua output setelahnya disimpan di buffer, bukan langsung ditampilkan. Berguna untuk render callback block.

ℹ️ Ini function bawaan PHP, bukan WordPress, tapi sangat sering dipakai di block development.

php
function myBlockRender($attributes) {
  ob_start(); ?>
  <div class="my-block">
    <h2><?php echo esc_html($attributes['title']); ?></h2>
  </div>
  <?php return ob_get_clean();
}

ob_get_clean()

Mengambil isi output buffer dan menghentikan buffering. Return string berisi semua output yang tertangkap.

ℹ️ Ini function bawaan PHP, bukan WordPress.

php
function myBlockRender($attributes) {
  ob_start();
  // ... HTML output ...
  return ob_get_clean();  // return HTML sebagai string
}

Chapter 24 — Multiple Choice Block

wp_register_style()

Mendaftarkan file CSS tanpa langsung memuatnya. Hanya dimuat saat dibutuhkan, misalnya oleh block.

php
wp_register_style('quizCSS', plugin_dir_url(__FILE__) . 'build/index.css');

register_block_type('ourplugin/quiz', array(
  'editor_script' => 'newBlockScript',
  'style' => 'quizCSS'            // CSS dimuat saat block ada di halaman
));

plugin_dir_path()

Return path absolut (filesystem) menuju folder plugin saat ini. Untuk include/require file PHP.

php
require plugin_dir_path(__FILE__) . 'inc/generateProfessorHTML.php';

💡 Bedanya dengan plugin_dir_url(): dir_path = path filesystem (untuk PHP include), dir_url = URL (untuk browser/enqueue).


load_plugin_textdomain()

Memuat file terjemahan (.mo) plugin dari folder tertentu. Penting untuk internasionalisasi (i18n).

php
function featuredProfessorLanguages() {
  load_plugin_textdomain('featured-professor', false, dirname(plugin_basename(__FILE__)) . '/languages');
}
add_action('init', 'featuredProfessorLanguages');

wp_set_script_translations()

Mengatur file terjemahan khusus untuk JavaScript. Memungkinkan __() dan _x() bekerja di file JS.

php
wp_set_script_translations('featuredProfessorScript', 'featured-professor', plugin_dir_path(__FILE__) . '/languages');

is_singular()

Mengecek apakah halaman yang dilihat adalah halaman singular (single post, page, atau custom post type). Bisa menerima post type sebagai filter.

php
if (is_singular('professor') && in_the_loop() && is_main_query()) {
  // Hanya di halaman detail professor, dalam loop, di main query
}

in_the_loop()

Mengecek apakah eksekusi kode sedang berada di dalam WordPress Loop. Sering dipakai sebagai safety check di filter the_content.

php
add_filter('the_content', 'addRelatedPosts');

function addRelatedPosts($content) {
  if (is_singular('professor') && in_the_loop() && is_main_query()) {
    $content .= relatedPostsHTML(get_the_ID());
  }
  return $content;
}

Chapter 26 — Custom SQL & Database Table

register_activation_hook()

Menjalankan function tertentu saat plugin diaktifkan untuk pertama kali. Biasanya untuk membuat tabel database atau set default option.

php
register_activation_hook(__FILE__, 'onActivate');

function onActivate() {
  // Buat tabel database, set default options, dll
}

dbDelta()

Membuat atau mengupdate struktur tabel database secara aman. WordPress membandingkan SQL dengan tabel yang ada — hanya mengubah yang berbeda.

php
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

function createPetTable() {
  global $wpdb;
  $charset = $wpdb->get_charset_collate();
  $tableName = $wpdb->prefix . "pets";
  
  dbDelta("CREATE TABLE $tableName (
    id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
    petname varchar(60) NOT NULL DEFAULT '',
    species varchar(60) NOT NULL DEFAULT '',
    PRIMARY KEY (id)
  ) $charset;");
}

$wpdb->insert()

Memasukkan data baru ke tabel database menggunakan object $wpdb. Otomatis sanitize data untuk mencegah SQL injection.

php
global $wpdb;

$wpdb->insert(
  $wpdb->prefix . 'pets',          // nama tabel
  array(                             // data
    'petname' => sanitize_text_field($_POST['incomingPetName']),
    'species' => sanitize_text_field($_POST['incomingSpecies'])
  ),
  array('%s', '%s')                  // format: string, string
);

$wpdb->get_results()

Mengambil beberapa baris data dari database. Return array of objects.

php
global $wpdb;

$pets = $wpdb->get_results(
  "SELECT * FROM {$wpdb->prefix}pets"
);

foreach ($pets as $pet) {
  echo $pet->petname . ' - ' . $pet->species;
}

$wpdb->prepare()

Mempersiapkan SQL query dengan placeholder aman (%s untuk string, %d untuk integer). Wajib dipakai saat query mengandung variabel dari user.

php
global $wpdb;

$results = $wpdb->get_results(
  $wpdb->prepare(
    "SELECT * FROM {$wpdb->prefix}pets WHERE species = %s",
    'cat'
  )
);

$wpdb->get_var()

Mengambil satu nilai tunggal dari database. Cocok untuk COUNT, MAX, atau mengambil satu kolom satu baris.

php
global $wpdb;

$jumlahPets = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}pets");
echo "Total pets: " . $jumlahPets;

$wpdb->delete()

Menghapus baris dari tabel database berdasarkan kondisi WHERE.

php
global $wpdb;

$wpdb->delete(
  $wpdb->prefix . 'pets',           // nama tabel
  array('id' => $petId),            // kondisi WHERE
  array('%d')                        // format: integer
);

wp_safe_redirect()

Melakukan redirect ke URL yang harus berada di domain yang sama (internal). Lebih aman dari wp_redirect() karena menolak external URL.

php
wp_safe_redirect(admin_url('admin.php?page=pet-adoption'));
exit;

admin_url()

Return URL menuju area admin WordPress. Bisa ditambah path spesifik.

php
$settingsUrl = admin_url('admin.php?page=pet-adoption');
$dashboardUrl = admin_url();
echo '<a href="' . esc_url($settingsUrl) . '">Kelola Pets</a>';

Chapter 27 — Block Themes & Full Site Editing

add_editor_style()

Menambahkan file CSS khusus untuk ditampilkan di Gutenberg block editor. Membuat tampilan editor mirip frontend.

php
function university_features() {
  add_editor_style(array('https://fonts.googleapis.com/css?family=Roboto', 'build/style-index.css', 'build/index.css'));
}
add_action('after_setup_theme', 'university_features');

get_stylesheet_directory_uri()

Return URL lengkap menuju folder theme aktif (child theme jika ada). Digunakan untuk referensi aset dari theme.

php
wp_register_script(
  'bannerScript',
  get_stylesheet_directory_uri() . '/build/banner.js',
  array('wp-blocks', 'wp-editor')
);

get_theme_file_path()

Return path absolut (filesystem) ke file di dalam folder theme. Untuk include/require file PHP dari theme.

php
require get_theme_file_path('/inc/search-route.php');
require get_theme_file_path("/our-blocks/{$blockName}.php");

Chapter 28 — Block JSON & Render PHP

register_block_type_from_metadata()

Mendaftarkan block type dari file block.json. Cara resmi dan modern — cukup 1 baris PHP menggantikan wp_register_script + register_block_type manual.

php
// Cukup satu baris ini!
register_block_type_from_metadata(__DIR__ . '/blocks/banner', array(
  'render_callback' => 'bannerRenderCallback'
));

// WordPress otomatis membaca block.json untuk:
// - nama block, script, style, dependencies
// - attributes, supports, dll

Chapter 29 — Interactivity API

wp_interactivity_data_wp_context()

Mengkonversi PHP array menjadi atribut data-wp-context yang aman untuk HTML. Digunakan untuk mengirim data per-elemen dari PHP ke JavaScript di Interactivity API.

php
<?php
$ourContext = array(
  'correctAnswer' => get_field('correct_answer'),
  'isCorrect' => false
);
?>
<div data-wp-interactive="create-block"
     <?php echo wp_interactivity_data_wp_context($ourContext); ?>>
  <!-- elemen interaktif -->
</div>

wp_interactivity_state()

Mengatur global state dari PHP yang bisa diakses oleh JavaScript di Interactivity API. State bersifat global — dibagikan ke semua elemen di halaman.

php
wp_interactivity_state("create-block", array(
  "solvedCount" => 0,
  "totalQuestions" => count($questions)
));

💡 Context vs State: Context (wp_interactivity_data_wp_context) = data per-elemen, State (wp_interactivity_state) = data global seluruh halaman.


Quick Reference — Semua Function per Chapter

ChapterJumlahFunction Utama
314have_posts, the_post, the_title, the_content, wp_enqueue_style/script, add_action
415add_theme_support, is_page, site_url, get_permalink, body_class, register_nav_menu
516WP_Query, wp_trim_words, paginate_links, the_archive_title, the_time, is_single
610register_post_type, get_field/the_field, is_main_query, add_filter
83the_post_thumbnail, the_post_thumbnail_url, add_image_size
92get_template_part, get_the_archive_title
133wp_localize_script, get_site_url, wp_create_nonce
145register_rest_route, sanitize_text_field, register_rest_field, get_the_author
164esc_url, esc_html, get_search_query, get_search_form
179is_user_logged_in, wp_login_url, wp_logout_url, get_avatar, wp_redirect
185esc_attr, wp_strip_all_tags, esc_textarea, sanitize_textarea_field, count_user_posts
193wp_insert_post, wp_delete_post, get_post_field
2219Settings API, Options API, current_user_can, i18n (__, _e), selected, checked
234register_block_type, wp_register_script, ob_start, ob_get_clean
241wp_register_style
255plugin_dir_path, load_plugin_textdomain, wp_set_script_translations, is_singular, in_the_loop
269register_activation_hook, dbDelta, $wpdb methods, wp_safe_redirect, admin_url
273add_editor_style, get_stylesheet_directory_uri, get_theme_file_path
281register_block_type_from_metadata
292wp_interactivity_data_wp_context, wp_interactivity_state

📖 Catatan: get_field() dan the_field() berasal dari plugin Advanced Custom Fields (ACF), bukan core WordPress. ob_start() dan ob_get_clean() adalah function bawaan PHP, bukan WordPress, tapi sangat umum digunakan dalam pengembangan theme/plugin.