Panduan Memulai Pengembangan Plugin WordPress: Membangun Ekstensi Fitur Kustom Pertama Anda dari Nol.

Baca dalam 4 menit.
2026-03-17
2026-06-03
2,717
Saya mendapatkan komisi ketika Anda berbelanja melalui tautan di bawah ini, tanpa biaya tambahan untuk Anda.

Mengapa perlu mengembangkan plugin khusus (custom plugins)?

WordPress terkenal dengan keandalan dan kemampuan ekspansinya yang tinggi, dan salah satu rahasia utamanya adalah sistem plugin-nya. Ketika kebutuhan situs web akan fitur tertentu melebihi kemampuan tema atau plugin yang sudah ada, mengembangkan plugin sendiri menjadi pilihan terbaik. Berbeda dengan langsung memodifikasi tema… functions.php Dibandingkan dengan membuat file secara langsung, membuat sebuah plugin yang terpisah memiliki keunggulan yang signifikan. Plugin terpisah dari tema, sehingga meskipun Anda mengganti tema, fungsi plugin tetap dapat dipertahankan secara utuh, yang menjamin independensi dan kemudahan pemeliharaan fungsi tersebut. Selain itu, sebuah plugin dengan struktur yang baik dapat dengan mudah dipindahkan dan digunakan kembali di berbagai situs web, bahkan dapat didistribusikan melalui saluran resmi atau pihak ketiga.

Mengembangkan plugin khusus memungkinkan Anda mengontrol logika fungsional dengan tepat, sehingga menghindari beban kinerja dan konflik kode yang mungkin timbul akibat penggunaan terlalu banyak plugin umum. Dari generasi kode sederhana hingga pengelolaan data dan alur kerja yang kompleks, pengembangan plugin membuka kemungkinan untuk menyesuaikan WordPress sesuai kebutuhan Anda secara mendalam.

Membangun struktur dasar untuk plugin pertamamu

Sebuah plugin WordPress pada dasarnya merupakan satu atau lebih komponen yang terletak di dalam struktur kode aplikasi WordPress itu sendiri. wp-content/plugins/ File-file PHP yang berada di dalam direktori tersebut. Langkah pertama dalam membuat sebuah plugin adalah membuat struktur dasarnya.

推荐阅读 Panduan Dasar Pengembangan Plugin WordPress: Membangun Plugin Fungsional Pertama Anda Dari Nol

Membuat file plugin utama dan menambahkan komentar di bagian awal (header)

Pertama, di wp-content/plugins/ Buatlah folder baru di dalam direktori tersebut, misalnya… my-first-pluginKemudian, buat file PHP utama di dalam folder tersebut; file tersebut biasanya memiliki nama yang sama dengan nama folder tersebut.my-first-plugin.php

UltaHost – Hosting untuk WordPress
Jaminan pengembalian uang dalam 30 hari, bandwidth dan basis data yang tidak terbatas, perlindungan DDoS gratis, diskon 50% untuk pembelian selama 3 tahun (dari harga normal: 50%).

Pada awal sebuah file, harus terdapat komentar header plugin yang sesuai dengan standar WordPress. Komentar ini sangat penting karena digunakan oleh WordPress untuk mengenali sebuah plugin. Komentar tersebut berisi informasi dasar tentang plugin dan akan ditampilkan di halaman pengelolaan plugin di backend.

<?php
/**
 * Plugin Name:       我的第一个自定义插件
 * Plugin URI:        https://example.com/my-first-plugin
 * Description:       这是一个用于学习的 WordPress 自定义插件示例。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://example.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Setelah menyimpan file tersebut, masuk ke panel administrasi WordPress, lalu kunjungi halaman “Plugins”. Anda seharusnya dapat melihat plugin dengan nama “My First Custom Plugin” dalam daftar tersebut, dan dapat mengaktifkan atau menonaktifkannya. Saat ini, plugin tersebut belum memiliki fungsi apa pun yang nyata.

Membuat “pembungkus keamanan” (security packaging) untuk fitur plugin

Untuk menghindari konflik antara nama fungsi dengan tema atau plugin lainnya, praktik terbaik adalah mengemas semua fungsi dalam sebuah kelas, atau menambahkan prefiks yang unik pada setiap nama fungsi. Di sini kita menggunakan pendekatan dengan kelas, karena hal tersebut memberikan tingkat pengemasan (encapsulation) dan struktur organisasi yang lebih baik.

Di dalam file utama, setelah komentar di bagian header, kita dapat mulai mendefinisikan kelas utama dari plugin tersebut.

推荐阅读 Panduan Lengkap untuk Mengembangkan Plugin WordPress: Membuat Plugin Fungsional Pertama Anda dari Nol.

if ( ! defined( 'ABSPATH' ) ) {
    exit; // 防止直接访问文件
}

class My_First_Plugin {
    /**
     * 构造方法,用于初始化插件
     */
    public function __construct() {
        // 初始化钩子
        $this->init_hooks();
    }

/**
     * 初始化 WordPress 钩子(动作和过滤器)
     */
    private function init_hooks() {
        // 后续的钩子将在这里添加
    }
}

// 初始化插件
new My_First_Plugin();

lulus (tagihan atau inspeksi, dll) if ( ! defined( 'ABSPATH' ) ) Kode ini memastikan bahwa file tersebut hanya dapat diakses melalui lingkungan WordPress, sehingga meningkatkan keamanannya. Sekarang, kerangka dasar plugin tersebut sudah siap.

Menggunakan “hook” untuk memperluas fungsi inti WordPress

Inti dari API plugin WordPress adalah “Hook” (Pengait), yang memungkinkan Anda untuk menjalankan kode kustom pada titik waktu tertentu atau terhadap data tertentu. Hook terbagi menjadi dua jenis: Action (Aksi) dan Filter (Filter).

Memahami dan menambahkan sebuah “hook” aksi sederhana (simple action hook)…

Action hooks menjalankan kode Anda ketika peristiwa tertentu terjadi, misalnya saat artikel diterbitkan atau halaman manajemen dimuat. Hook tersebut tidak mengembalikan nilai apa pun; hanya melakukan tugas-tugas yang ditentukan saja.

hosting.com hosting bersama
Kinerja tinggi, dilengkapi dengan CPU AMD EPYC, penyimpanan SSD NVMe, dan LiteSpeed, dukungan internal ahli 24 jam sehari, langkah-langkah keamanan canggih termasuk SSL, brute force, malware, dan perlindungan DDoS, menghemat hingga 731 TB/bulan.

Mari kita tambahkan sebuah fitur: menambahkan secara otomatis sebuah teks kustom di akhir setiap artikel. Kita akan menggunakan… the_content Filter ini (ya, meskipun namanya “filter”, sebenarnya sering digunakan untuk menambahkan konten; secara teknis memang merupakan filter karena menerima dan mengembalikan konten) akan digunakan untuk mendemonstrasikan sebuah tindakan murni. Namun, sebagai permulaan, kita juga akan menambahkan fitur untuk menampilkan pesan di panel manajemen di latar belakang.

Pertama, di init_hooks Menambahkan mekanisme pendaftaran “hook” dalam metode:

private function init_hooks() {
    // 在文章内容末尾添加信息的过滤器
    add_filter( 'the_content', array( $this, 'append_custom_text' ) );
    // 在管理栏添加节点的动作
    add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_node' ), 999 );
}

Kemudian, definisikan metode panggilan balik (callback method) yang sesuai di dalam kelas tersebut:

推荐阅读 Panduan Lengkap Pengembangan Plugin WordPress: Dari Pemula hingga Ahli dalam Membangun Fitur Kustom.

/**
 * 在文章内容末尾添加自定义文本(过滤器回调)
 *
 * @param string $content 原始文章内容。
 * @return string 修改后的文章内容。
 */
public function append_custom_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Teknisi pendukung untuk artikel ini disediakan oleh “My First Plugin”.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}

/**
 * 在管理工具栏添加一个自定义节点(动作回调)
 *
 * @param WP_Admin_Bar $wp_admin_bar WordPress 管理栏对象。
 */
public function add_admin_bar_node( $wp_admin_bar ) {
    $args = array(
        'id'    =&gt; 'my_plugin_node',
        'title' =&gt; '我的插件',
        'href'  =&gt; admin_url( 'plugins.php' ),
        'meta'  =&gt; array( 'class' =&gt; 'my-plugin-node' )
    );
    $wp_admin_bar-&gt;add_node( $args );
}

Sekarang, setelah plugin diaktifkan, teks yang ditambahkan akan muncul di bagian bawah setiap artikel di halaman depan, dan sebuah menu bernama “My Plugins” juga akan muncul di bagian atas bilah manajemen di halaman belakang.

Menggunakan filter untuk memodifikasi hasil output data

Filter digunakan untuk memodifikasi data yang dilewatkan pada titik tertentu. Filter menerima sebuah nilai dan harus mengembalikan nilai yang telah dimodifikasi. Seperti yang kita gunakan sebelumnya… append_custom_text Metode sebenarnya hanyalah sebuah fungsi (callback) yang berfungsi sebagai “filter”. Mari kita buat contoh filter yang lebih tipikal: mengubah panjang ringkasan artikel (abstract) sebuah artikel.

Hosting bersama InterServer.
Hosting bersama seharga $2,50 USD per bulan, diskon $0,1 USD untuk bulan pertama dengan kode promo tryinterserver, serta 461 skrip aplikasi cloud yang dapat diinstal dengan sekali klik.

init_hooks Tambahkan ini ke dalam Chinese (sederhana):

add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), 999 );

Kemudian, definisikan metode panggilan balik (callback method):

/**
 * 修改文章摘要的默认字数长度
 *
 * @param int $length 默认的摘要长度。
 * @return int 修改后的摘要长度。
 */
public function custom_excerpt_length( $length ) {
    // 将摘要长度设置为 30 个字
    return 30;
}

Membuat halaman opsi plugin yang dapat dikonfigurasi

Untuk membuat plugin lebih fleksibel, biasanya diperlukan menyediakan halaman pengaturan bagi pengguna. WordPress menyediakan “Settings API” untuk membuat halaman opsi tersebut dengan cara yang aman dan terstandarisasi.

Membuat menu manajemen dan halaman anak (sub-page)

Pertama-tama, kita perlu menambahkan sebuah item menu di backend WordPress. Kita akan menggunakan… add_options_page Fungsi tersebut menambahkan sebuah halaman anak di bawah menu utama “Pengaturan”.

init_hooks Tambahkan aksi di dalamnya:

add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) );

Mendefinisikan metode untuk menambahkan menu:

/**
 * 向 WordPress 后台添加插件设置页面
 */
public function add_plugin_admin_menu() {
    add_options_page(
        '我的插件设置',          // 页面标题
        '我的插件',             // 菜单标题
        'manage_options',       // 所需权限
        'my-first-plugin',      // 菜单 Slug
        array( $this, 'display_plugin_admin_page' ) // 回调函数
    );
}

Menggunakan API pengaturan untuk mendaftarkan dan merender field (kolom data).

Selanjutnya, kita perlu mendefinisikan… display_plugin_admin_page Metode untuk merender konten halaman, serta mendaftarkan pengaturan, bidang (field), dan bab (chapter).

Pertama-tama, tambahkan kaitan (hook) lainnya untuk mendaftarkan pengaturan:

add_action( 'admin_init', array( $this, 'register_plugin_settings' ) );

Kemudian implementasikan metode-metode yang terkait:

/**
 * 使用 WordPress 设置 API 注册设置、字段和章节
 */
public function register_plugin_settings() {
    // 注册一个设置,存储到一个选项 `my_first_plugin_options`
    register_setting(
        'my_first_plugin_options_group', // 选项组名
        'my_first_plugin_options'        // 选项名
    );

// 添加一个设置章节
    add_settings_section(
        'my_first_plugin_main_section',  // 章节 ID
        '主要设置',                      // 章节标题
        array( $this, 'render_section_description' ), // 章节描述回调
        'my-first-plugin'                // 页面 Slug
    );

// 向章节中添加一个文本字段
    add_settings_field(
        'custom_text_field',             // 字段 ID
        '自定义文本',                    // 字段标题
        array( $this, 'render_text_field' ), // 字段渲染回调
        'my-first-plugin',               // 页面 Slug
        'my_first_plugin_main_section'   // 所属章节 ID
    );
}

/**
 * 渲染设置章节的描述文字
 */
public function render_section_description() {
    echo '<p>Di sini, Anda dapat mengonfigurasi pengaturan untuk plugin pertama Anda.</p>';
}

/**
 * 渲染自定义文本输入字段
 */
public function render_text_field() {
    $options = get_option( 'my_first_plugin_options' );
    $value = isset( $options['custom_text_field'] ) ? $options['custom_text_field'] : '';
    echo '<input type="text" name="my_first_plugin_options[custom_text_field]" value="' . esc_attr( $value ) . '" class="regular-text" />'; echo '
    echo '<p class="description">Teks yang dimasukkan di sini akan ditampilkan di akhir artikel.</p>';
}

/**
 * 渲染插件管理页面的主要内容
 */
public function display_plugin_admin_page() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <div class="wrap">
        <h1>\n</h1>
        <form action="/id/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 输出安全字段、章节和字段
            settings_fields( 'my_first_plugin_options_group' );
            do_settings_sections( 'my-first-plugin' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="id"/></form>
    </div>
    \n&lt;?php
}

Terakhir, kita perlu memodifikasi hal-hal yang telah kita lakukan sebelumnya. append_custom_text Metode untuk membaca teks yang disimpan oleh pengguna dari daftar opsi:

public function append_custom_text( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $options = get_option( 'my_first_plugin_options' );
        $custom_text = isset( $options['custom_text_field'] ) &amp;&amp; ! empty( $options['custom_text_field'] ) ?
            '<p><em>'`. esc_html($options['custom_text_field'])`.'</em></p>' :
            '<p><em>Teknisi pendukung untuk artikel ini disediakan oleh “My First Plugin”.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}

Sekarang, pengguna dapat mengatur teks yang akan ditampilkan di akhir artikel melalui halaman “Setelan” -> “Plugin Saya”.

Menyimpulkan.

Dengan panduan ini, kita telah melalui proses dasar pengembangan plugin khusus untuk WordPress secara lengkap: mulai dari membuat struktur file dasar dan pengemasan kode yang aman, hingga memahami dan memanfaatkan mekanisme ekstensi inti WordPress, yaitu hook aksi (actions) dan filter (filters), serta akhirnya membuat plugin yang dapat dikonfigurasi dengan halaman pengaturan di backend. Kita juga menunjukkan cara menggunakan API pengaturan WordPress secara terstandar untuk membuat halaman opsi (option pages), yang memastikan penyimpanan data yang aman dan konsistensi tampilan antarmuka pengguna.

Menguasai pengetahuan dasar ini merupakan langkah yang penting untuk melangkah ke pengembangan plugin yang lebih kompleks. Di kemudian hari, Anda dapat mengeksplorasi topik-topik yang lebih tingkat, seperti membuat tabel database khusus, membuat kode singkat (shortcodes), menambahkan widget, menulis endpoint REST API, serta mengimplementasikan interaksi AJAX. Ingatlah bahwa organisasi kode yang baik, pemeriksaan keamanan yang menyeluruh (seperti verifikasi akses, pembersihan data, dan penggunaan mekanisme escape), serta pematuhan terhadap standar pemrograman WordPress, merupakan kunci untuk mengembangkan plugin yang berkualitas tinggi dan mudah dikelola.

FAQ - Pertanyaan yang Sering Diajukan.

Apa saja pengetahuan dasar yang diperlukan untuk pengembangan plugin?

Anda perlu memiliki pengetahuan dasar tentang bahasa pemrograman PHP, termasuk konsep-konsep seperti sintaks, variabel, fungsi, kelas, dan objek. Pemahaman dasar tentang HTML, CSS, dan JavaScript juga sangat membantu, terutama saat membuat plugin yang melibatkan interaksi antarmuka pengguna (front-end) atau antarmuka backend yang kompleks. Pengetahuan tentang operasi dasar dan arsitektur WordPress juga sangat penting.

Bagaimana cara mendeteksi dan memperbaiki kesalahan (debug) pada plugin yang sedang dikembangkan?

Pertama-tama, pastikan bahwa di dalam sistem Anda… wp-config.php Dalam berkas tersebut… WP_DEBUG Atur menjadi trueIni akan mengaktifkan fitur pelaporan kesalahan (error reporting) di WordPress. Gunakan alat pengembang (developer tools) di browser (tab Console dan Network) untuk memeriksa kesalahan JavaScript serta permintaan jaringan (network requests). Untuk kode PHP, Anda dapat menggunakan… error_log() Fungsi tersebut mencatat variabel atau informasi ke dalam log debug di server, atau menggunakan plugin debug khusus untuk melacak alur eksekusi kode dan status variabel.

Apakah kode functions.php dari tema tersebut dapat langsung dipindahkan ke dalam plugin?

Dalam banyak kasus, hal tersebut memungkinkan, tetapi perlu diperhatikan masalah penggunaan path (jalur) dan URL. Penggunaannya dapat dilakukan dalam topik (tema) tertentu. get_template_directory_uri() Untuk mendapatkan URI direktori topik, dalam plugin sebaiknya digunakan metode yang sesuai. plugin_dir_url(FILE)Sama halnya, fungsi untuk mendapatkan path direktori tema (theme directory path). get_template_directory() Juga harus diganti dengan plugin. plugin_dir_path(FILE)Selain itu, pastikan semua fungsi dalam kode dibungkus dengan baik dalam kelas atau fungsi yang memiliki prefiks, untuk menghindari konflik.

Apa yang perlu diperhatikan saat mengembangkan plugin komersial?

Plugin komersial yang dikembangkan berdasarkan rencana pengembangan tersebut perlu lebih memperhatikan kualitas kode, keamanan, dan kemampuan untuk diperluas (scalability). Persiapan untuk internasionalisasi dan lokalisasi juga harus dilakukan secara menyeluruh (dengan menggunakan…). __()_e() Fungsi dan bidang teks (text fields) perlu disertakan dalam dokumentasi agar dapat diterjemahkan. Kode harus mengikuti standar pengkodean WordPress. Perlu dipertimbangkan juga lisensi yang digunakan (umumnya GPL) serta mekanisme pembaruan yang akan berlaku. Menyediakan dokumentasi penggunaan yang jelas dan lengkap serta saluran dukungan teknis yang memadai juga sangat penting. Dalam ekosistem WordPress tahun 2026, memastikan bahwa plugin kompatibel dengan versi terbaru WordPress, versi PHP, tema-tema populer, serta plugin lainnya merupakan bagian penting dari proses pemeliharaan yang berkelanjutan.

Bagaimana cara menambahkan dukungan berbahasa multibahasa untuk plugin?

WordPress menggunakan teknologi GNU gettext untuk mendukung fitur internasionalisasi (i18n). Pertama-tama, semua string yang perlu diterjemahkan dalam sebuah plugin harus dibungkus menggunakan fungsi tertentu. __('文本', 'my-first-plugin') Digunakan untuk mengembalikan hasil terjemahan._e('文本', 'my-first-plugin') Digunakan untuk menghasilkan terjemahan. Setelah itu, gunakan alat seperti Poedit untuk memindai kode sumber plugin tersebut, sehingga tercipta file terjemahan yang diperlukan. .pot File template. Penerjemah menggunakan file template ini untuk membuat file dalam bahasa yang diinginkan. .po File tersebut kemudian dikompilasi menjadi kode yang dapat dibaca oleh mesin. .mo File. Terakhir, perlu untuk… load_plugin_textdomain() Fungsi tersebut diintegrasikan ke dalam kode inisialisasi plugin, sehingga file terjemahan dapat diunduh dari path yang benar.