Tutorial pembangunan plugin WordPress: Membina plugin pertama anda dari awal hingga akhir.

Bacaan 3 minit
2026-03-13
2026-06-03
1,932
Saya mendapat komisen apabila anda membeli-belah melalui pautan di bawah, tanpa sebarang kos tambahan kepada anda.

Preparasi dan pembinaan persekitaran.

Sebelum mula menulis kod, pastikan bahawa persekitaran pembangunan anda telah diset up dengan betul. Sebuah persekitaran pembangunan tempatan yang baik dapat meningkatkan kecekapan pembangunan dan pengalaman penyelidikan kesilapan (debugging) dengan ketara.

Pertama sekali, anda perlu memasang persekitaran pelayan web pada komputer lokal anda, yang biasanya dipanggil “persekitaran pelayan lokal”. Salah satu pilihan yang paling popular ialah XAMPP atau MAMP, yang mengintegrasikan Apache, MySQL/MariaDB, dan PHP. Satu lagi penyelesaian yang kuat adalah dengan menggunakan Docker untuk mengkonfigurasi persekitaran yang hampir sama dengan persekitaran produksi. Tidak kira pilihan yang anda buat, pastikan bahawa versi PHP anda (disyorkan 7.4 atau lebih tinggi) dan versi MySQL adalah serasi dengan kebanyakan persekitaran hos WordPress.

Seterusnya, muat turun dan pasang versi terkini WordPress. Lepaskan fail WordPress ke dalam direktori akar laman web pada pelayan anda (contohnya, direktori XAMPP). htdocs Anda perlu membuat folder tersebut, dan menyelesaikan pengaturan mengikut proses pemasangan yang terkenal, iaitu “Five Minutes Installation”. Pastikan anda dapat mengakses laman web WordPress setempat dengan berjaya.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Pendekatan yang mudah difahami: Panduan lengkap untuk mempelajari pembangunan plugin WordPress dari awal

Akhir sekali, dan ini adalah langkah yang sangat penting: sediakan sebuah editor kod. Editor seperti Visual Studio Code,PhpStorm, atau Sublime Text disyorkan, kerana ia mempunyai ciri-ciri seperti penyorotan kod, cadangan pintar, dan kemudahan untuk membetulkan ralat (debugging). Terutamanya untuk pembangunan menggunakan bahasa PHP, ciri-ciri ini dapat membantu anda mengelakkan banyak ralat sintaks yang ringan.

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.

Struktur asas plugin dan fail utama

Sebuah plugin WordPress mempunyai struktur fail yang standard dan penting, di mana intinya terletak pada… /wp-content/plugins/ Folder dengan nama yang sama dalam direktori tersebut, serta fail PHP utama di dalam folder tersebut.

Mencipta fail utama untuk plugin

Pertama sekali, /wp-content/plugins/ Cipta sebuah folder baru dalam direktori tersebut. Namanya harus ringkas, unik, dan mampu menggambarkan fungsi plugin tersebut, seperti “my-first-plugin”. Kemudian, dalam folder tersebut, cipta sebuah fail PHP dengan nama yang sama seperti folder tersebut. my-first-plugin.php

Fail utama ini merupakan “titik masuk” (entry point) untuk plugin, dan WordPress mengenal pasti metadata plugin tersebut dengan membaca maklumat header plugin yang terdapat di bahagian atas fail tersebut. Maklumat header plugin merupakan blok ulasan standard PHP yang mesti diletakkan di awal fail. Sekurang-kurangnya, ia perlu mengandungi nama plugin dan deskripsi plugin tersebut.

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

Dalam kod di atas,Plugin Name Ini adalah item wajib diisi; yang lain adalah pilihan tetapi disyorkan untuk diisi. Maklumat ini akan dipaparkan di halaman pengurusan “Plugin” di bahagian belakang WordPress (backend).Text Domain Digunakan untuk pengekstrakan data yang bersifat antarabangsa (sokongan pelbagai bahasa), dan selaras dengan bidang teks yang digunakan semasa memanggil fungsi terjemahan seterusnya.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Menguasai Pembangunan Plugin WordPress dari Awal: Prinsip, Amalan, dan Teknik Lanjutan

Mendefinisikan konstanta asas untuk plugin

Amalan yang baik dalam pembangunan plugin adalah untuk menentukan beberapa konstanta yang berguna pada awal, seperti laluan fail plugin dan URL, supaya ia mudah dirujuk dalam kod yang seterusnya. Ini dapat mengelakkan penggunaan kod yang “hard-coded” (diprogram secara langsung), menjadikan kod lebih mudah diselenggara dan dipindahkan ke sistem lain.

Anda boleh menambahkan kod berikut dalam fail utama, segera selepas maklumat kepala plugin, untuk mendefinisikan pemalar (constants):

// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
    exit; // 如果 ABSPATH 未定义,则退出
}

// 定义插件路径和URL常量
define( 'MFP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'MFP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'MFP_PLUGIN_VERSION', '1.0.0' );

Di sini,plugin_dir_path( FILE )plugin_dir_url( FILE ) Ini adalah fungsi teras yang disediakan oleh WordPress, yang membenarkan anda mendapatkan laluan direktori dan URL fail plugin semasa dengan selamat.MFP_PLUGIN_VERSION Konstanta digunakan untuk menyimpan nombor versi plugin, yang memudahkan penggunaan semasa memasukkan skrip gaya atau membuat perbandingan versi.

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%.

Pengimplementasian fungsi utama dan penggunaan hook

Inti kepada pembangunan plugin WordPress terletak pada penggunaan sistem “Hook”. Terdapat dua jenis Hook: Action dan Filter. Hook membenarkan anda untuk menyisipkan kod anda pada titik masa tertentu semasa WordPress berjalan (seperti semasa halaman dimuat atau artikel disimpan), atau untuk mengubah data yang dihasilkan oleh fungsi-fungsi lain.

Tambahkan satu pengait tindakan yang mudah (simple action hook).

Mari kita laksanakan fungsi yang paling asas: menambahkan satu baris teks di bahagian kaki laman web (footer). Kita akan menggunakan “action hook” untuk mencapainya. wp_footerIa akan diaktifkan sebelum kandungan HTML dipaparkan di bahagian kaki halaman (footer).

Tambahkan sebuah fungsi dalam fail utama, kemudian gunakannya melalui… add_action Fungsi tersebut akan menggunakannya untuk pemasangan (mounting). wp_footer Di atas gantung ini.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Pembangunan Plugin WordPress: Ajar Anda Langsung Bagaimana Membina Plugin Anda Sendiri Dari Kosong

/**
 * 在网站页脚输出自定义文本
 */
function mfp_display_footer_text() {
    echo '<p style="text-align: center; color: #666;">Terima kasih kerana menggunakan plugin WordPress pertama saya!</p>';
}
add_action( 'wp_footer', 'mfp_display_footer_text' );

Sekarang, aktifkan plugin anda dan kunjungi bahagian hadapan laman web tersebut. Gulung ke bahagian bawah halaman, dan anda sepatutnya dapat melihat baris teks ini. Inilah penggunaan asas “action hook”: melakukan sesuatu pada masa yang ditentukan.

Menggunakan penapis untuk mengubah kandungan

Penapis digunakan untuk mengubah nilai yang sedia ada. Sebagai contoh, jika kita ingin mengubah tajuk artikel dengan menambahkan frasa “【Rekomendasi】” di hadapan setiap tajuk, ini boleh dilakukan dengan menggunakan penapis tersebut. the_title Ia dilaksanakan menggunakan penapis (filters).

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.

Cipta sebuah fungsi baru yang menerima tajuk asal yang ingin disaring sebagai parameter, dan mengembalikan tajuk yang telah diubah suai, kemudian melalui… add_filter Mount.

/**
 * 在所有文章标题前添加前缀
 * @param string $title 原始标题
 * @return string 修改后的标题
 */
function mfp_add_prefix_to_title( $title ) {
    // 确保只在主循环中修改,避免影响后台列表等其他地方
    if ( is_single() && in_the_loop() ) {
        $title = '【推荐】' . $title;
    }
    return $title;
}
add_filter( 'the_title', 'mfp_add_prefix_to_title' );

Contoh yang mudah ini menunjukkan kekuatan penapis: anda boleh memeriksa syarat-syarat (seperti…) is_single() Menentukan sama ada halaman tersebut merupakan halaman artikel tunggal, dan hanya membuat pengubahsuaian pada kandungan yang berkaitan dengan konteks tertentu.

Menambahkan halaman pengurusan dan amalan keselamatan

Sebuah plugin yang lengkap dengan fungsi-fungsi yang diperlukan biasanya memerlukan halaman konfigurasi di bahagian belakang (backend), agar pentadbir laman web dapat membuat penyesuaian yang diperlukan. Pada masa yang sama, memastikan keselamatan kod adalah sangat penting.

Halaman tetapan untuk mencipta plugin

Kita akan menggunakan… add_menu_page Fungsi tersebut menambahkan menu pengurusan utama dan halaman tetapan yang bersesuaian untuk plugin tersebut.

Pertama sekali, buat sebuah fungsi untuk menjana kandungan HTML halaman tetapan, kemudian gunakannya dengan memuatnya ke dalam sistem. admin_menu Fungsi hook tindakan digunakan untuk mendaftarkan menu ini.

/**
 * 渲染插件设置页面的HTML内容
 */
function mfp_render_settings_page() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        wp_die( __( '你没有足够的权限访问此页面。', 'my-first-plugin' ) );
    }
    ?&gt;
    <div class="wrap">
        <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
        <p>Ini adalah halaman tetapan untuk plugin pertama saya. Pada masa akan datang, borang dan pilihan boleh ditambahkan di sini.</p>
        <form action="/ms/options.php/" method="post" data-trp-original-action="options.php">
            <?php
            // 后续可以在这里添加设置字段
            // settings_fields( 'mfp_options_group' );
            // do_settings_sections( 'mfp-settings-page' );
            // submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="ms"/></form>
    </div>
    &lt;?php
}

/**
 * 注册插件管理菜单
 */
function mfp_add_admin_menu() {
    add_menu_page(
        &#039;我的第一个插件设置&#039;, // 页面标题
        &#039;我的插件&#039;,          // 菜单标题
        &#039;manage_options&#039;,    // 所需权限 (manage_options)
        &#039;mfp-settings-page&#039;, // 菜单slug
        &#039;mfp_render_settings_page&#039;, // 回调函数
        &#039;dashicons-admin-plugins&#039;, // 图标 (Dashicons)
        80                   // 菜单位置
    );
}
add_action( &#039;admin_menu&#039;, &#039;mfp_add_admin_menu&#039; );

Setelah mengaktifkan plugin tersebut, anda akan melihat pilihan menu baru yang bernama “My Plugins” di sebelah kiri skrin pentadbiran WordPress. Klik pada pilihan tersebut untuk masuk ke halaman tetapan yang ringkas. Di sini terdapat antara muka yang disediakan untuk menambahkan bidang borang menggunakan WordPress Settings API, yang merupakan cara standard untuk mengendalikan input pengguna dengan selamat.

Pemverian Data dan Penyisihan (Data Validation and Escaping)

Sebarang data yang diterima daripada pengguna atau dihantar ke pelayar mesti diproses untuk mencegah serangan skrip merentas tapak (XSS) dan pengisian semula kod SQL (SQL injection). WordPress menyediakan pelbagai fungsi keselamatan yang berguna untuk tujuan ini.

  • Keluaran yang diubah: Gunakan esc_html()esc_attr()esc_url()wp_kses_post() Fungsi-fungsi seperti ini digunakan untuk membersihkan kandungan yang akan dipaparkan dalam HTML.
  • Pemverian Data: Penggunaan sanitize_text_field()sanitize_email() Fungsi-fungsi seperti ini digunakan untuk membersihkan data yang dihantar dari borang.
  • Kunci bukan CE (Non-CE Key): Untuk operasi borang yang melibatkan pengubahsuaian data, kunci bukan CE mesti digunakan. wp_nonce_field()wp_verify_nonce() Untuk mengesahkan kesahihan permintaan tersebut.

Keselamatan merupakan aspek yang paling penting dalam pembangunan plugin, dan amalan yang baik harus dibudayakan sejak awal.

RINGKASAN

Melalui tutorial ini, kita telah menyelesaikan proses pembangunan sebuah plugin WordPress yang lengkap, walaupun kecil namun mempunyai semua komponen yang diperlukan. Kita bermula dari awal, membina persekitaran pembangunan, mencipta struktur fail utama plugin yang mematuhi piawaian, dan dengan melaksanakan dua fungsi iaitu menambahkan teks ke bahagian kaki halaman (footer) dan mengubah tajuk artikel, kita telah memahami dengan lebih mendalam penggunaan asas hook akksi (action hooks) dan hook penapis (filter hooks) yang merupakan asas kepada sistem WordPress. Akhirnya, kita juga menambahkan halaman pentadbiran asas untuk plugin tersebut, serta menekankan kepentingan amalan keselamatan seperti pengesahan data, pemeriksaan hak akses, dan pengelakan kod berbahaya (output escaping).

Plugin “Hello World” yang ringkas ini sudah mengandungi elemen-elemen asas yang diperlukan oleh plugin komersial: struktur standard, penggunaan fungsi “hook”, antara muka belakang (backend interface), dan pertimbangan keselamatan. Dengan ini sebagai titik permulaan, anda boleh mencuba mengintegrasikan API Settings WordPress untuk membuat pilihan (options) yang sebenar, menulis jadual pangkalan data yang khusus, atau mencipta kod pendek (shortcodes) serta alat bantu (tools) yang lebih kompleks. Ingatlah, belajar secara berterusan daripada manual pembangunan rasmi dan mengkaji kod plugin sumber terbuka yang berkualiti adalah cara terbaik untuk meningkatkan kemahiran anda.

FAQ - Soalan Lazim

###: Bagaimana untuk membaiki (debug) plugin WordPress saya?
Langkah pertama adalah mengaktifkan mod pembangunan (debug mode) di WordPress. Di dalam… wp-config.php Dalam fail tersebut, akan… WP_DEBUG Nilai konstanta ditetapkan sebagai… trueAnda juga boleh membuat tetapan tambahan. WP_DEBUG_LOGtrueCatatkan maklumat ralat ke… /wp-content/debug.log Dalam fail tersebut, elakkan daripada memaparkan mesej ralat secara langsung di halaman web, kerana ia boleh mempengaruhi pengguna.

Selain itu, menggunakan panel Console dan Network dalam alat pembangun pelayar (F12) untuk melihat ralat JavaScript dan permintaan API, serta mengintegrasikan alat pembangun PHP seperti Xdebug dengan editor kod anda (seperti VS Code) untuk melakukan pembetulan ralat (debugging) dengan menggunakan titik henti (breakpoints), merupakan kaedah yang sangat efisien dan profesional.

Mengapa plugin saya menghasilkan “ralat kritikal” ketika diaktifkan?

Ini biasanya disebabkan oleh ralat sintaks PHP atau penggunaan fungsi/kelas yang tidak wujud. Pertama sekali, periksa log pembangunan WordPress (seperti yang dinyatakan di atas). Maklumat ralat akan menunjukkan dengan jelas pada fail mana dan baris mana masalah berlaku.

Sebab-sebab yang sering berlaku termasuk: kekurangan tanda koma (;), kurangnya kurungan atau ketidaksesuaian tanda petik (“”), pemanggilan fungsi tanpa fail yang diperlukan, atau kod yang masih cuba dijalankan walaupun plugin tersebut telah dinonaktifkan. Pastikan bahawa versi PHP anda memenuhi syarat yang diperlukan, dan semua fungsi telah didefinisikan sebelum digunakan.

Bagaimana untuk menjadikan plugin saya menyokong berbilang bahasa (internasionalisasi)?

WordPress menggunakan rangka kerja GNU gettext untuk melaksanakan fungsi internasionalisasi (i18n) dan lokalisasi (l10n). Pertama sekali, seperti yang ditunjukkan dalam tutorial, pastikan pengaturan yang betul dilakukan dalam bahagian kepala fail utama (header file). Text Domain(Contohnya my-first-plugin) dan Domain Path

Dalam kod plugin, semua rentetan yang perlu diterjemahkan harus dibungkus menggunakan fungsi terjemahan, seperti ini:__( ‘文本’, ‘my-first-plugin’ )_e( ‘文本’, ‘my-first-plugin’ )Kemudian, gunakan alat seperti Poedit untuk mengimbas rentetan teks dalam kod tersebut, menjana fail template .pot, dan membuat fail .po serta .mo untuk bahasa yang bersesuaian (seperti bahasa Cina zh_CN), dan letakkan fail-fail tersebut di tempat yang ditentukan. /languages/ Dalam direktori tersebut.

Bagaimanakah untuk berinteraksi dengan pangkalan data dengan selamat semasa pembangunan plugin?

Jangan sekali-kali menulis kod SQL secara langsung untuk menyatukan input pengguna. Anda mesti menggunakan kelas operasi pangkalan data yang disediakan oleh WordPress. $wpdbIa menyediakan ciri-ciri seperti… $wpdb->prepare() Metode seperti ini dapat mengendalikan klausa persediaan (preparation statements) untuk pertanyaan SQL dengan cara yang selamat, sekali gus mencegah serangan SQL injection dengan berkesan.

Sebagai contoh, cara untuk mencari data adalah seperti berikut:

global $wpdb;
$user_input = $_POST['some_input'];
$safe_query = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}table WHERE column = %s", $user_input );
$results = $wpdb->get_results( $safe_query );

Pada masa yang sama, lakukan pengesahan data dan pembersihan yang ketat terhadap input pengguna, seperti dengan menggunakan… sanitize_text_field() Fungsi-fungsi seperti itu.