Panduan Terakhir Pembangunan Plugin WordPress: Membina Plugin Pertama Anda Dari Kosong

Bacaan 3 minit
2026-03-15
2026-06-04
2,382
Saya mendapat komisen apabila anda membeli-belah melalui pautan di bawah, tanpa sebarang kos tambahan kepada anda.

Preparasi dan pembinaan persekitaran.

Sebelum anda mula menulis kod, anda memerlukan persekitaran pembangunan yang sesuai. Ini termasuk pemasangan WordPress secara lokal, editor kod, serta pengetahuan asas tentang PHP. XAMPP, MAMP, atau Local by Flywheel disyorkan untuk membina persekitaran WordPress lokal dengan cepat. Pastikan bahawa versi PHP yang anda gunakan memenuhi keperluan rasmi WordPress, iaitu PHP 7.4 atau lebih tinggi.

Sebuah plugin pada dasarnya terdiri daripada satu atau lebih fail PHP, yang diletakkan di dalam direktori WordPress.wp-content/pluginsSetiap plugin dalam direktori tersebut mesti mempunyai nama yang unik, dan bahagian atas fail utamanya perlu mengandungi ulasan maklumat plugin yang standard. Ini merupakan asas bagi WordPress untuk mengenal pasti plugin tersebut.

Cipta fail plugin pertama anda.

Pertama sekali,wp-content/pluginsCipta sebuah folder baru dalam direktori tersebut, sebagai contoh…my-first-pluginKemudian, cipta fail PHP utama di dalam folder tersebut; biasanya namanya sama dengan nama folder itu sendiri.my-first-plugin.phpDalam fail ini, anda perlu menulis maklumat kepala untuk plugin tersebut.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Lengkap Pembangunan Plugin WordPress: Membina Plugin Pertama Anda Dari Kosong

<?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
 */

Setelah menyimpan fail tersebut, masuk ke halaman “Pemasangan” (Plugins) di panel pentadbiran WordPress. Anda sepatutnya dapat melihat “My First Plugin” dalam senarai pemasangan. Aktifkan plugin tersebut. Walaupun ia belum mempunyai sebarang fungsi, ini menandakan bahawa plugin anda telah berjaya dimuatkan oleh WordPress.

UltaHost – Penyedia Hosting untuk WordPress
Jaminan pemulangan wang dalam tempoh 30 hari, lebar jalur dan pangkalan data yang tidak terhad, perlindungan DDoS percuma, diskaun 50% untuk pembelian selama 3 tahun.

Memahami Mekanisme Asas WordPress: Hook dan Filter

Kekuatan kebolehluasan WordPress terletak pada arkitekturnya yang berdasarkan pengendalian acara (event-driven), dengan komponen utamanya adalah “Hook”. Hook terbahagi kepada dua jenis: Action dan Filter. Memahami kedua-duanya adalah kunci untuk mengembangkan plugin yang berkesan.

Action hooks membenarkan anda untuk menyisipkan dan menjalankan kod anda pada masa-masa tertentu, seperti ketika artikel diterbitkan atau halaman dimuat. Sebagai contoh, anda boleh menghantar e-mel apabila sebuah artikel diterbitkan. Anda boleh menggunakan action hooks untuk melakukan tindakan tersebut.add_action()Fungsi tersebut akan memuatkan fungsi khusus yang anda buat ke dalam pengait tindakan (action hook) yang ditentukan.

Hook filter membenarkan anda mengubah data. Sebelum data tersebut digunakan (seperti disimpan ke dalam pangkalan data atau dipaparkan di dalam pelayar), anda boleh menghalang dan mengubahnya. Sebagai contoh, anda boleh mengubah tajuk artikel atau kandungan ulasan. Anda boleh menggunakan…add_filter()Fungsi ini digunakan untuk mengaplikasikan penapis (filter).

Gunakan pengait tindakan untuk menambah fungsi

Bayangkan kita ingin menambahkan satu baris teks khusus di bahagian kaki (footer) halaman pentadbiran laman web. WordPress menyediakan sebuah alat yang bernama…admin_footerKita boleh menambahkan kod berikut ke dalam fail utama plugin untuk mengaktifkan fungsi pengait tindakan (action hook).

Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan untuk pemula dalam pembangunan plugin WordPress: Membina plugin pertama anda dari awal.

// 定义一个在管理后台页脚显示信息的函数
function myplugin_display_admin_footer_text() {
    echo '<p>Terima kasih kerana menggunakan “My First Plugin”!</p>';
}
// 将函数挂载到 admin_footer 动作钩子
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' );

Simpan fail tersebut dan kemudian refresh halaman admin WordPress. Gulung ke bahagian bawah halaman (footer), dan anda sepatutnya dapat melihat teks yang telah ditambahkan. Itulah aplikasi asas dari “action hook”: mengeluarkan kod pada lokasi tertentu dalam proses pengurusan WordPress.

Menggunakan penapis untuk mengubah kandungan

Sekarang, mari kita cuba mengubah semua tajuk artikel dengan menambahkan simbol jenama pada akhir setiap tajuk secara seragam. Kita boleh menggunakan…the_titlePenapis.

// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
    // 确保只在主循环且非管理后台中修改
    if ( ! is_admin() && in_the_loop() ) {
        $title = $title . ' ™';
    }
    return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 );

Kod ini akan memeriksa sama ada persekitaran semasa berada dalam gelung utama artikel di bahagian hadapan (frontend). Jika ya, simbol “™” akan ditambahkan selepas tajuk.10Ia merupakan keutamaan (semakin kecil nombor tersebut, semakin awal ia akan dijalankan).2Ini bermakna fungsi kita menerima dua parameter (yang asal).$title$post_id)。

hosting.com Hosting Bersama
Prestasi tinggi, menampilkan CPU AMD EPYC, storan SSD NVMe dan LiteSpeed, dengan sokongan pakar dalaman 24/7, langkah keselamatan canggih termasuk SSL, perlindungan serangan paksa kata laluan, perisian hasad dan DDoS, menjimatkan sehingga 73%.

Membina ciri tambahan (plugin): Mencipta menu pengurusan dan halaman tetapan

Sebuah plugin yang matang biasanya memerlukan pilihan konfigurasi yang disediakan di bahagian belakang (backend) WordPress. Ini melibatkan penciptaan halaman menu pengurusan khusus untuk plugin tersebut. WordPress menyediakan pelbagai fungsi API untuk mencapai fungsi ini, sebagai contoh…add_menu_page()add_options_page()

Tambah menu pengurusan tahap atas

Kita akan menambahkan menu utama yang berasingan untuk plugin tersebut. Ini biasanya dilakukan…admin_menuTugas tersebut telah selesai dalam fungsi “action hook”. Kita akan membuat sebuah fungsi untuk mendefinisikan menu dan halaman.

// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',           // 页面标题
        '我的插件',               // 菜单标题
        'manage_options',         // 所需权限(管理员)
        'myplugin-settings-page', // 菜单slug(唯一标识)
        'myplugin_display_settings_page', // 用于显示页面内容的回调函数
        'dashicons-admin-generic', // 菜单图标(Dashicons)
        30                        // 菜单位置
    );
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ );

Seterusnya, kita perlu mendefinisikan fungsi panggilan balik (callback function).myplugin_display_settings_page()Untuk merender kandungan HTML halaman tetapan.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Pembangunan Plugin WordPress: Panduan Lengkap Dari Permulaan Hingga Kemahiran Tinggi – Membina Fungsi Khusus Sendiri

// 定义设置页面的显示内容
function myplugin_display_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Tetapan-tetapan plugin saya</h1>
        <form method="post" action="/ms/options.php/" data-trp-original-action="options.php">
            <?php
            // 输出设置字段、安全nonce等
            settings_fields( ‘myplugin_settings_group’ );
            do_settings_sections( ‘myplugin-settings-page’ );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="ms"/></form>
    </div>
    &lt;?php
}

Pengaturan pendaftaran, bidang data, dan pembahagian (partitioning)

Untuk mengendalikan data borang dengan selamat, kita perlu menggunakan API tetapan WordPress. Ini termasuk proses pendaftaran tetapan, menambahkan zon dan bidang tetapan.

// 初始化插件设置
function myplugin_settings_init() {
    // 1. 注册一个设置(存储在wp_options表中)
    register_setting(
        ‘myplugin_settings_group’, // 设置组名,与 settings_fields() 对应
        ‘myplugin_options’ // 存储在数据库中的选项名
    );

// 2. 添加一个设置分区
    add_settings_section(
        ‘myplugin_section_basic’, // 分区ID
        ‘基础设置’, // 分区标题
        ‘myplugin_section_basic_callback’, // 分区介绍的回调函数
        ‘myplugin-settings-page’ // 所属页面的slug
    );

// 3. 为分区添加一个字段
    add_settings_field(
        ‘myplugin_field_message’, // 字段ID
        ‘欢迎信息’, // 字段标签
        ‘myplugin_field_message_callback’, // 渲染字段HTML的回调函数
        ‘myplugin-settings-page’, // 所属页面的slug
        ‘myplugin_section_basic’ // 所属分区的ID
    );
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );

// 分区介绍的回调函数
function myplugin_section_basic_callback() {
    echo ‘<p>Konfigurasi maklumat asas untuk plugin.</p>’;
}

// 字段渲染的回调函数
function myplugin_field_message_callback() {
    // 从数据库获取现有值
    $options = get_option( ‘myplugin_options’ );
    $value = $options[‘message’] ?? ‘’; // PHP 7.0+ 空合并运算符
    // 输出输入框
    echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
}

Sekarang, plugin anda mempunyai halaman tetapan pengurusan yang lengkap dan mematuhi standard WordPress, yang membolehkan anda menyimpan dan membaca pilihan konfigurasi dengan selamat.

Hosting Bersama InterServer
Hosting kongsi: 1TB/bulan pada $2.50 USD, bulan pertama pada $0.10 USD dengan kod promo tryinterserver. 461 skrip aplikasi awan tersedia untuk pemasangan satu klik.

Amalan terbaik untuk pengekstrakan antarabangsa dan keselamatan plugin

Untuk membolehkan plugin anda digunakan oleh pengguna di seluruh dunia, proses internasionalisasi (i18n) adalah langkah yang penting. Pada masa yang sama, mematuhi garis panduan keselamatan merupakan asas untuk melindungi anda dan laman web pengguna daripada serangan.

Mengimplementasikan pengekstrakan teks ke dalam pelbagai bahasa (internationalization of text)

WordPress digunakan__()_e()Fungsi-fungsi seperti ini digunakan untuk melaksanakan terjemahan. Pertama sekali, anda perlu memastikan bahawa pengaturan yang betul telah dilakukan di bahagian atas plugin (header plugin).Text Domain(Contohnya:my-first-pluginKemudian, balut semua rentetan teks yang ditujukan untuk pengguna dengan fungsi terjemahan.

// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>Terima kasih kerana menggunakan “My First Plugin”!</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
    echo ‘<p>‘ . esc_html__( ‘感谢使用“我的第一个插件”!’, ‘my-first-plugin’ ) . ‘</p>’;
}

Seterusnya, anda perlu menggunakan alat seperti Poedit untuk menghasilkannya..pot(Bentuk templat) Fail tersebut disimpan dalam plugin.languagesDalam folder tersebut. Penterjemah boleh membuat yang sesuai..poDan selepas dikompilasi..moFail. Akhir sekali, gunakannya semasa pemulaan plugin.load_plugin_textdomain()Function loading.

function myplugin_load_textdomain() {
    load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’ );
}
add_action( ‘plugins_loaded’, ‘myplugin_load_textdomain’ );

Patuhi garis panduan pengkodan yang selamat.

Keselamatan adalah sangat penting. Pertama sekali, jangan pernah percaya pada input yang diberikan oleh pengguna. Semua data yang datang dari pengguna atau sumber luar…$_GET$_POST$_COOKIESemua data tersebut mesti melalui proses pengesahan, pembersihan, dan pengekstrakan (escaping).

  • Keluaran yang dielakkan: Apabila data dihasilkan untuk dipersembahkan dalam HTML, JavaScript, atau URL, gunakan fungsi pengelakkan (escape function) yang sesuai.
    // 输出到HTML属性
    echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
    // 输出到HTML内容
    echo ‘<p>‘. esc_html($text)‘.‘</p>’;
    // 输出到JavaScript变量
    echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
    // 输出到URL
    echo ‘<a href="/ms/“‘/" . esc_url( $url ) ‘“>Pautan</a>’;
  • Verifikasi input: Semak sama ada data tersebut memenuhi format yang dijangka (seperti alamat e-mel, nombor, dsb.).
    if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
        // 不是有效的邮箱地址
        wp_die( ‘无效的邮箱格式。’ );
    }
  • Pemeriksaan Keupayaan: Sebelum menjalankan operasi pengurusan, periksa sama ada pengguna semasa mempunyai kuasa yang diperlukan.
    if ( ! current_user_can( ‘manage_options’ ) ) {
        wp_die( ‘你没有执行此操作的权限。’ );
    }
  • Pengesahan Nonce: Untuk operasi yang melibatkan perubahan keadaan (seperti penghantaran borang, permintaan AJAX), Nonce (nombor sekali guna) digunakan untuk mencegah serangan penggodaman permintaan merentas tapak (Cross-Site Request Forgery/CSRF).
    // 在表单中输出nonce字段
    wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
    // 在处理请求时验证nonce
    if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
        wp_die( ‘安全校验失败。’ );
    }

RINGKASAN

Melalui panduan ini, anda telah melalui keseluruhan proses daripada membuat fail plugin asas, memahami dan menggunakan sistem hook dalam WordPress, membina antara muka pengurusan pentadbir, hingga ke pelaksanaan ciri antarabangsa dan amalan keselamatan asas. Anda kini telah menguasai kemahiran asas yang diperlukan untuk membangunkan plugin WordPress yang lengkap dengan fungsi, struktur yang jelas, dan selamat serta boleh dipercayai. Inti dari pembangunan plugin adalah menggunakan hook aksi (actions) dan filter dengan baik untuk memperluas keupayaan WordPress, sambil sentiasa meletakkan keselamatan dan kebolehurusan sebagai keutamaan. Seterusnya, anda boleh mencuba untuk meneroka API yang lebih kompleks, seperti jadual pangkalan data yang diperibadikan, interaksi AJAX, atau titik akhir API REST, untuk membina alat yang lebih kuat.

FAQ - Soalan Lazim

Apa pengetahuan asas yang diperlukan untuk membangunkan plugin WordPress untuk ###?
Anda perlu memiliki pengetahuan asas dalam pengaturcaraan PHP, dan pemahaman tentang HTML, CSS, serta JavaScript (terutamanya jQuery) akan sangat membantu. Yang paling penting, anda perlu mempunyai pemahaman awal tentang struktur asas WordPress, seperti tema, plugin, jenis artikel, peranan pengguna, dan konsep-konsep lain yang berkaitan. Panduan ini menganggap bahawa anda telah mempunyai pengetahuan asas tersebut.

Bagaimana untuk men-debug plugin WordPress saya?

Pertama sekali, pastikan anda…wp-config.phpDalam fail tersebutWP_DEBUGKonstanta ditetapkan kepadatrueIni akan memaparkan ralat PHP, amaran, dan notis pada halaman web. Selain itu, ia juga boleh digunakan untuk…error_log()Fungsi tersebut akan menulis maklumat pembaikan (debugging information) ke dalam log ralat (error log) pelayan. Untuk pembaikan yang lebih kompleks, anda boleh mempertimbangkan untuk menggunakan plugin pembaikan khusus, seperti Query Monitor, yang membenarkan anda melihat butiran terperinci seperti pertanyaan pangkalan data (database queries), pelaksanaan fungsi pengait (hook functions), dan proses muatkan skrip (script loading).

Bagaimanakah saya harus mengedarkan plugin yang saya bangunkan?

Untuk penggunaan peribadi atau perkongsian dalam skop yang kecil, anda boleh mengemas fail tersebut dalam format ZIP. Jika anda ingin menerbitkannya secara umum, terdapat dua cara utama: pertama, hantar ke direktori plugin rasmi WordPress (WordPress.org), yang memerlukan anda mengikuti garis panduan penghantaran dan standard kod yang ditetapkan, namun ini akan memberikan anda pendedahan yang paling luas; kedua, edarkan melalui laman web sendiri atau platform pihak ketiga seperti CodeCanyon. Sebelum menghantar ke direktori rasmi, pastikan kualiti dan keselamatan kod anda.

Bagaimana untuk menambahkan jenis artikel atau kategori khusus untuk plugin saya?

Anda boleh menggunakanregister_post_type()Fungsi untuk membuat jenis artikel khusus (Custom Post Type/CPT), gunakanregister_taxonomy()Fungsi untuk membuat klasifikasi tersuai. Operasi ini sebaiknya dilakukan di…initIa dilaksanakan dalam “action hooks”. WordPress Codex dan Developer Handbook menyediakan penjelasan terperinci mengenai parameter kedua-dua fungsi tersebut, dan ini merupakan cara yang sangat berkuasa untuk memperluas keupayaan pengurusan kandungan WordPress.

Bagaimanakah nama fungsi dalam plugin dapat dielakkan daripada bertembung dengan plugin lain?

Untuk mengelakkan konflik nama fungsi, kelas, atau pemalar, amalan terbaik adalah dengan menggunakan ruang nama (namespace) dalam PHP 5.3 dan ke atas. Jika plugin anda perlu menyokong versi PHP yang lebih lama, atau anda ingin memastikan keserasian yang maksimum, anda boleh menggunakan kaedah menambahkan awalan yang unik kepada semua penanda (identifier). Sebagai contoh, gunakan nama plugin atau singkatan sebagai awalan.myplugin_function_nameMyPlugin_ClassNameMYPLUGIN_CONSTANTContoh kod dalam panduan ini semua menggunakan kaedah penambahan awalan (prefix method).