Menguasai Pembangunan Plugin WordPress dari Awal: Prinsip, Amalan, dan Teknik Lanjutan

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

WordPress plugins merupakan mekanisme utama untuk memperluas fungsi asasnya. Dengan menggunakan plugins, anda boleh menambahkan pelbagai ciri dan keupayaan kepada laman web anda tanpa perlu mengubah kod asas WordPress. Pembangunan plugins mengikut satu set peraturan dan amalan terbaik untuk memastikan keselamatan, prestasi, dan kemudahan penyelenggaraan. Sebuah plugin standard memerlukan sekurang-kurangnya satu fail utama, dan nama fail tersebut biasanya sama dengan nama plugin tersebut. my-awesome-plugin.phpArtikel ini akan bermula dengan konsep asas dan membimbing anda secara beransur-ansur ke dalam dunia pembangunan plugin.

Memahami prinsip asas plugin

Secara asasnya, sebuah plugin untuk WordPress terdiri daripada satu atau lebih fail PHP, yang disimpan dalam direktori yang ditentukan oleh WordPress. /wp-content/plugins/ Dalam direktori tersebut, plugin berinteraksi dengan sistem teras WordPress melalui API (Application Programming Interface) dan sistem Hook yang disediakan oleh WordPress.

Mekanisme operasi sistem hook

Sistem Hook merupakan inti dalam pembangunan plugin untuk WordPress. Pembangun biasanya menggunakan dua cara untuk “menghubungkan” (hook into) proses kerja laluan standard WordPress: Action dan Filter. Action membenarkan anda menjalankan kod khusus pada titik masa yang ditentukan, manakala Filter membenarkan anda mengubah data yang dihantar semasa proses berlangsung.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Pembangunan Plugin WordPress: Dari Permulaan Hingga Ke Mahiran: Panduan Langsung Untuk Membina Fungsi Khusus Anda Sendiri

Sebagai contoh, gunakan… add_action() Fungsi tersebut boleh mendaftarkan “action hook”. Apabila WordPress menjalankan ke titik tindakan (action point) yang berkaitan, fungsi panggilan balik (callback function) yang anda ikatkan akan dijalankan.

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.

Standard header information for plugins

Setiap fail PHP utama bagi sebuah plugin mesti mengandungi blok ulasan kepala fail yang standard, yang digunakan untuk memberikan maklumat meta tentang plugin tersebut kepada WordPress. Maklumat ini mengawal cara plugin dipaparkan pada halaman pengurusan plugin di bahagian belakang (backend).

<?php
/**
 * Plugin Name: 我的超级插件
 * Plugin URI: https://www.example.com/my-super-plugin/
 * Description: 这是一个用来演示插件开发基础的示例插件。
 * Version: 1.0.0
 * Author: 张三
 * Author URI: https://www.example.com/
 * License: GPL v2 or later
 * Text Domain: my-super-plugin
 */

Pemuatan dan pengaktifan plugin

Apabila pengguna mengaktifkan sebuah plugin melalui panel pentadbiran WordPress, WordPress akan menjalankan kod yang terdapat dalam fail utama plugin tersebut setiap kali halaman dimuat (selagi kod tersebut tidak terletak di dalam fungsi atau tidak dilindungi oleh syarat tertentu). Oleh itu, adalah disyorkan untuk mengumpulkan semua kod fungsi dan kelas dalam plugin tersebut, dan memanggilnya melalui “hooks” (mekanisme pengaitan fungsi) untuk mengelakkan kod daripada dijalankan ketika plugin tersebut tidak aktif.

Membina plugin pertama anda

Mari kita mulakan dengan membuat sebuah plugin yang mudah, yang berfungsi untuk menambahkan kenyataan hak cipta secara automatik di akhir setiap kandungan artikel di laman web.

Mencipta fail plugin utama

Pertama sekali, /wp-content/plugins/ Cipta sebuah folder baru dalam direktori tersebut, dan berikan nama ia sebagai… my-first-pluginKemudian, cipta fail utama dalam folder tersebut. my-first-plugin.phpDan tambahkan maklumat header fail standard yang dinyatakan di atas.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Pembangunan Plugin WordPress: Panduan Lengkap Dari Permulaan Hingga Kemahiran Tinggi – Membina Modul Fungsi yang Sangat Dapat Disesuaikan

Menggunakan penapis untuk mengubah kandungan artikel

Kita akan menggunakan… the_content Gunakan penapis untuk mengubah output artikel. Tambahkan kod berikut ke dalam fail utama anda:

Fungsi myfp_add_copyright_to_content($content) {
    // Memastikan ia hanya dilaksanakan dalam lingkaran utama artikel, dan bukan dalam panel pentadbiran
    jika (is_single() &amp;&amp; !is_admin()) {
        $copyright_text = ' <ms> Fungsi myfp_add_copyright_to_content($content) {
    // Memastikan ia hanya dilaksanakan dalam lingkaran utama artikel, dan bukan dalam panel pentadbiran
    jika (is_single() &amp;&amp; !is_admin()) {
        $copyright_text = '<p><em>Hak cipta untuk artikel ini adalah milik laman web ini. Sila nyatakan sumber jika anda menggunakan semula kandungan ini.</em></p>';
        $content .= $copyright_text;
    }
    return $content;
}
add_filter( 'the_content', 'myfp_add_copyright_to_content' );

myfp_add_copyright_to_content Fungsi tersebut menerima satu parameter. $contentIaitu kandungan artikel tersebut. Kita menggunakan fungsi penentuan syarat untuk melakukannya. is_single()Pastikan ia hanya ditambahkan pada halaman artikel yang berasingan, dan… !is_admin() Oleh itu, ia menghalang teks hak cipta ini daripada dipaparkan dalam editor latar belakang.

Pemprosesan penyesuaian tempatan untuk plugin

Untuk membolehkan plugin menyokong berbilang bahasa, proses internasionalisasi (i18n) perlu dilakukan. Pertama sekali, pengaturan yang diperlukan telah dilakukan dalam bahagian kepala fail utama (main file header). Text Domain: my-first-pluginKemudian, muatkan fail bahasa semasa pemulaan plugin.

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

Biasanya, kita menggunakan… plugins_loaded Ambil tindakan untuk memuat turun terjemahan dengan selamat. Pada masa yang sama, gunakan… __()_e() Gunakan fungsi-fungsi seperti ini untuk mengelilingi semua rentetan teks yang perlu diterjemahkan.

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

Mod Pengembangan Plugin Lanjutan

Apabila fungsi plugin menjadi lebih kompleks, penggunaan pendekatan pengembangan berorientasikan objek (Object-Oriented Programming/OOP) dan kaedah yang lebih terstruktur akan membawa kepada organisasi yang lebih baik, pengasingan komponen (encapsulation), serta kemudahan dalam penyelenggaraan (maintainability).

Menggunakan Pemrograman Berorientasikan Objek

Menggunakan kelas untuk mengapsulkan semua fungsi plugin adalah pilihan yang bijak. Ini dapat mengelakkan konflik nama fungsi dan menyediakan struktur kod yang jelas.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Penguraian Mendalam: Memahami Asas dan Amalan Sebenar Pembangunan Plugin WordPress Dari Kosong

class My_Advanced_Plugin {
    public function __construct() {
        // 在构造函数中绑定所有钩子
        add_action('wp_footer', array($this, 'add_footer_notice'));
        add_filter('the_title', array($this, 'modify_post_title'));
    }

public function add_footer_notice() {
        echo '<p style="text-align:center;">Disediakan sokongan teknikal oleh My Advanced Plugin.</p>';
    }

public function modify_post_title($title) {
        if (in_the_loop()) {
            return '📝 ' . $title;
        }
        return $title;
    }
}
// 实例化插件类
new My_Advanced_Plugin();

Tambahkan halaman tetapan untuk pentadbiran latar belakang.

Banyak plugin memerlukan pilihan konfigurasi untuk pengguna. Menambahkan halaman tetapan di bahagian belakang (backend) WordPress biasanya melibatkan penggunaan add_menu_page()add_submenu_page() Fungsi tersebut, digabungkan dengan API Settings, digunakan untuk menyimpan pilihan dengan selamat.

Kelas My_Plugin_Settings {
    public function __construct() {
        add_action('admin_menu', array($this, 'add_admin_menu'));
        add_action('admin_init', array($this, 'register_settings'));
    }

public function add_admin_menu() {
        add_options_page(
            'Pengaturan Plugin Saya', // Tajuk halaman
            'Plugin Saya',     // Tajuk menu
            'manage_options', // Keizinan
            'my-plugin-settings', // Nama panggilan menu
            array($this, 'render_settings_page') // Fungsi panggilan balik
        );
    }

public function render_settings_page() {
        ?&gt;  Class My_Plugin_Settings {
    public function __construct() {
        add_action('admin_menu', array($this, 'add_admin_menu'));
        add_action('admin_init', array($this, 'register_settings'));
    }

public function add_admin_menu() {
        add_options_page(
            'My Plugin Settings', // Page title
            'My Plugin',     // Menu title
            'manage_options', // Permission
            'my-plugin-settings', // Menu alias
            array($this, 'render_settings_page') // Callback function
        );
    }

public function render_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">
                <p>  
</p>
            <input type="hidden" name="trp-form-language" value="ms"/></form>
        </div>
        &lt;?php
    }

public function register_settings() {
        register_setting(&#039;my_plugin_options_group&#039;, &#039;my_plugin_option_name&#039;);
        // ... 添加设置字段和章节
    }
}

Mencipta jadual pangkalan data khusus

Untuk beberapa plugin yang memerlukan penyimpanan data yang kompleks, mungkin perlu membuat jadual data yang khusus (custom data tables). Kerja ini sepatutnya dilakukan ketika plugin tersebut diaktifkan.

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.

WordPress menyediakan kelas yang memudahkan pengurusan pangkalan data. wpdbKod untuk membuat jadual biasanya diletakkan dalam fail yang diakses melalui… register_activation_hook Dalam fungsi yang telah didaftarkan.

function my_plugin_create_database_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'my_custom_data';
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        user_id mediumint(9) NOT NULL,
        data text NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY (id)
    ) $charset_collate;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'my_plugin_create_database_table');

Keselamatan dan pengedaran plugin

Sebelum sesebuah plugin dilancarkan, keselamatannya mesti dipastikan, dan proses pengedaran yang asas perlu difahami.

Melaksanakan amalan terbaik keselamatan

Semua data yang diterima daripada pengguna, sama ada daripada… $_GET$_POST Jika menggunakan pangkalan data, semua data mesti melalui proses pengesahan, pembersihan, dan pengekstrakan (escaping). Sentiasa gunakan fungsi yang disediakan oleh WordPress. esc_html()wp_strip_all_tags()intval() dan prepare() Cara untuk mengendalikan pertanyaan SQL untuk mencegah serangan XSS dan SQL injection.

Untuk pemeriksaan keupayaan dalam menjalankan tugas pentadbiran atau operasi kritikal, pastikan anda menggunakan fungsi pemeriksaan keupayaan yang sesuai. current_user_can('manage_options')check_ajax_referer()

Sediakan plugin untuk dihantar ke direktori rasmi.

Jika anda ingin mengedarkan plugin tersebut secara percuma kepada pengguna di seluruh dunia, anda boleh menghantarinya ke direktori plugin WordPress.org. Ini memerlukan anda untuk mematuhi beberapa piawaian dengan ketat, termasuk penggunaan SVN untuk kawalan versi, memastikan kualiti kod, dan menyediakan fail terjemahan, dan lain-lain. readme.txt Fail tersebut adalah penting, dan ia mematuhi format tertentu yang digunakan untuk menampilkan maklumat pada halaman butiran plugin.

RINGKASAN

Pembangunan plugin untuk WordPress bermula dengan memahami sistem hook teras, kemudian secara beransur-ansur belajar cara membina ciri-ciri, mengurus bahagian pentadbiran, memproses data, serta memberi perhatian kepada aspek keselamatan dan pengedaran. Pemula harus bermula dengan mencipta sebuah plugin yang mempunyai fungsi penapisan yang mudah, seterusnya mencuba pengaturcaraan berorientasikan objek, menambahkan halaman tetapan, dan mengoperasi jadual pangkalan data yang disesuaikan. Ingatlah bahawa keselamatan adalah keutamaan utama dalam pembangunan, dan penggunaan yang mahir terhadap fungsi-fungsi keselamatan yang disediakan oleh WordPress merupakan kunci untuk menulis plugin yang boleh dipercayai. Mengikuti standard pembangunan dan amalan terbaik akan menjadikan plugin anda mudah diselenggara, serta meletakkan asas yang kukuh untuk penerbitan pada direktori rasmi atau pasaran pada masa hadapan.

FAQ - Soalan Lazim

Berapakah minimum bilangan fail yang diperlukan untuk sebuah plugin?

Satu plugin memerlukan sekurang-kurangnya satu fail PHP. Cukuplah fail tersebut mengandungi maklumat header plugin yang betul, dan disimpan di tempat yang sesuai. /wp-content/plugins/ Dalam direktori atau sub-direktori tersebut, WordPress akan mengenali dan memuatkannya.

Tentu saja, apabila fungsi menjadi semakin kompleks, memecahkan kod ke dalam beberapa fail (seperti JavaScript, CSS, fail kelas PHP yang berasingan, dan sebagainya) merupakan cara yang lebih baik untuk mengatur kod tersebut.

Apa perbezaan antara hook dan filter dalam plugin WordPress?

Walaupun Action Hooks dan Filter Hooks kadangkala disebut sebagai “hooks” secara kolektif, tujuan penggunaannya adalah berbeza.

Action hooks membenarkan anda untuk “menyisipkan” segmen kod yang anda buat sendiri pada titik-titik tertentu dalam kitaran hayat (lifecycle) WordPress. Ia tidak memerlukan nilai pulangan; ia hanya perlu melakukan sesuatu, seperti menghantar e-mel atau merekod log. Fungsi teras yang digunakan untuk ini adalah… add_action()do_action()

Hook untuk penapis membenarkan anda “mengubah” nilai sesuatu variabel (biasanya rentetan atau array). Ia menjangkakan fungsi panggilan balik (callback function) anda untuk mengembalikan nilai yang telah diubah. Fungsi utama adalah… add_filter()apply_filters()

Untuk memahaminya dengan mudah: “Tindakan” (action) bermaksud “melakukan sesuatu”, manakala “penapis” (filter) bermaksud “mengubah data”.

Bagaimana untuk mengelakkan nama fungsi plugin daripada bertembung dengan tema atau plugin lain?

Cara terbaik adalah dengan menggunakan pengaturcaraan berorientasikan objek (Object-Oriented Programming), di mana semua fungsi anda dikapsul dalam satu kelas. Dengan cara ini, hanya nama kelas dan nama kaedah yang perlu kekal unik.

Jika menggunakan pengaturcaraan prosedural, anda harus menambahkan satu prefiks yang unik dan mudah dikenali kepada semua nama fungsi, nama konstanta, dan nama variabel global. Biasanya, nama plugin atau singkatan digunakan sebagai prefiks. Sebagai contoh, jika plugin anda bernama “Super Tool”, nama fungsi boleh ditulis seperti ini: stool_get_data()stool_OPTION_KEY Begini.

Satu cara yang lebih menyeluruh adalah dengan menggunakan ruang nama (namespace) dalam PHP, yang dapat mengasingkan kod anda dengan paling berkesan.

Bagaimana untuk mengurus tetapan dan pilihan pengguna semasa pembangunan plugin?

WordPress sangat mengesyorkan penggunaan API Settings mereka untuk menguruskan tetapan plugin. API ini menguruskan penyimpanan tetapan tersebut dengan selamat (dalam…). wp_options Menggunakan pengesahan bukan CE (Common Encryption Standard), rendering medan data, dan penghantaran borang merupakan kaedah yang selamat dan standard.

Langkah-langkah utama termasuk: menggunakan register_setting() Daftar satu kumpulan pilihan (option group) dan gunakannya. add_settings_section()add_settings_field() Tambahkan kawasan tetapan dan bidang (fields), kemudian gunakannya pada bahagian hadapan (frontend). settings_fields()do_settings_sections() Dengan ini, borang tetapan yang lengkap dapat dihasilkan. Semasa menyimpan pilihan, gunakan… update_option() Fungsi.