Penguraian Mendalam: Memahami Asas dan Amalan Sebenar Pembangunan Plugin WordPress Dari Kosong

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

Komponen asas sebuah plugin WordPress

Sebuah plugin standard untuk WordPress, yang terasnya terletak di… /wp-content/plugins/ Folder yang berdiri sendiri dalam direktori tersebut. Folder ini mesti mengandungi sekurang-kurangnya satu fail PHP utama, dan ulasan di bahagian atas fail tersebut mengandungi maklumat meta tentang plugin tersebut. Ini merupakan asas bagi WordPress untuk mengenal pasti plugin tersebut.

Komen kepala plugin sangat penting. Ia menggunakan format tertentu untuk menyatakan nama plugin, deskripsi, versi, penulis, dan maklumat lain kepada sistem WordPress. Sebuah komen kepala plugin yang tipikal adalah seperti berikut:

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

Kod ini mesti diletakkan di awal fail utama plugin.Plugin Name Ini adalah item wajib diisi, manakala yang lain adalah pilihan. Apabila WordPress memindai direktori plugin, ia membaca maklumat ini untuk menampilkan senarai plugin di antara muka pengurusan latar belakang.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Pembangunan Plugin WordPress: Dari Pemulaan Hingga Ke Mahiran: Panduan Langsung Untuk Membina Plugin Custom Pertama Anda

Selain daripada fail utama, sebuah plugin yang lengkap dengan ciri-ciri yang diperlukan biasanya juga mengandungi fail dan direktori lain, seperti yang digunakan untuk menyimpan sumber JavaScript dan CSS. assets Folder, yang digunakan untuk terjemahan. languages Folder, yang digunakan untuk menyimpan fail-fail kelas (class files). includes Folder, serta fail-fail template yang digunakan untuk paparan di bahagian hadapan (frontend). Struktur direktori yang baik merupakan asas kepada kemudahan penyelenggaraan (maintainability) dan keupayaan untuk diperluas (scalability) sebuah plugin.

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 teras WordPress: Hook

Falsafah utama dalam pembangunan plugin WordPress adalah “hook dan callback”. Hook membenarkan pembangun untuk “menyambungkan” kod khusus mereka pada masa-masa tertentu semasa kod inti WordPress dijalankan, sehingga mereka dapat memodifikasi atau menambah baik fungsi lalai tanpa perlu mengubah fail inti secara langsung. Ini memastikan kebersihan kod inti dan keselamatan semasa kemas kini plugin.

Hook terbahagi kepada dua jenis utama: Hook tindakan (action hook) dan Hook penapis (filter hook).

Penggunaan Hook Aksi (Action Hooks)

Action hooks dilaksanakan apabila acara tertentu berlaku, seperti penerbitan artikel, memuatkan halaman pengurusan, atau pengguna log masuk. Mereka tidak dijangka untuk mengembalikan sebarang nilai, dan terutamanya digunakan untuk melaksanakan tindakan tertentu. Pemaju menggunakan… add_action() Fungsi tersebut akan memuatkan fungsi tersedia (fungsi panggilan balik, atau callback function) pada titik pengaitan tindakan (action hook) yang ditentukan.

Sebagai contoh, jika kita ingin menambahkan kenyataan hak cipta secara automatik di akhir setiap kandungan artikel, kita boleh menggunakan kaedah tersebut. the_content Hook ini (walaupun ia sering digunakan sebagai penapis, tetapi di sini ia digunakan untuk menunjukkan konsep tindakan). Contoh yang lebih tipikal adalah untuk melaksanakan sesuatu operasi semasa WordPress dimulakan (dipraktikkan).

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

function myplugin_setup() {
    // 初始化插件,例如创建数据库表
}
add_action( 'init', 'myplugin_setup' );

Kod di atas menunjukkan bahawa apabila WordPress menjalankan prosesnya hingga ke titik tertentu… init Semasa tindakan ini dilakukan, semua yang telah kita definisikan akan berjalan secara serentak. myplugin_setup Fungsi.

Menggunakan hook penapis

Hook filter digunakan untuk mengubah data. Ia menerima satu variabel dan mengembalikan variabel yang telah diubah. Pembangun menggunakan hook filter ini untuk melakukan pelbagai tindakan pengubahsuaian pada data. add_filter() Fungsi ini digunakan untuk memuatkan fungsi penapisan yang dibuat sendiri. Ini merupakan cara yang paling sering digunakan untuk mengubah kandungan artikel, tajuk, pautan, dan data lain.

Berdasarkan contoh di atas, cara yang lebih betul untuk menambahkan maklumat hak cipta ke dalam kandungan artikel adalah dengan menggunakan… the_content Penyaring:

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%.
function myplugin_add_copyright( $content ) {
    if ( is_single() ) {
        $content .= '<p>Hak cipta artikel ini milik laman web ini. Sila berikan sumber apabila ingin menggunakannya semula.</p>';
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_add_copyright' );

Dalam contoh ini, fungsi… myplugin_add_copyright Menerima yang asli $content Variabel tersebut telah ditambahkan dengan segmen teks HTML di akhirnya, dan kemudian kandungan yang telah diubah suai itu dikembalikan. WordPress akan menggunakan nilai yang dikembalikan ini untuk menggantikan kandungan asal semasa pengeluaran.

Create a plugin management page.

Banyak plugin memerlukan pilihan konfigurasi yang disediakan di bahagian pentadbiran WordPress, dan ini memerlukan penciptaan halaman pengurusan. WordPress menyediakan satu siri fungsi untuk menambahkan item menu utama atau sub-menu.

Tambahkan item menu utama

Gunakan add_menu_page() Fungsi tersebut boleh membuat menu latar belakang yang berasingan untuk plugin. Fungsi ini memerlukan beberapa parameter, termasuk tajuk halaman, tajuk menu, kebenaran akses, nama samaran menu, dan fungsi panggilan balik (callback function), dan lain-lain.

Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Permulaan untuk Membangunkan Plugin WordPress: Membina Ekstensi Fungsi Pertama Anda Dari Awal

Berikut adalah contoh kod untuk membuat halaman pengurusan peringkat atas yang ringkas:

function myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置',          // 页面标题
        '我的插件',              // 菜单标题
        'manage_options',       // 所需权限(管理员)
        'myplugin-settings',    // 菜单别名(URL中的slug)
        'myplugin_settings_page', // 用于输出页面内容的回调函数
        'dashicons-admin-generic', // 图标(使用Dashicons)
        80                      // 菜单位置
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

// 定义输出页面内容的回调函数
function myplugin_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
            settings_fields( 'myplugin_settings_group' );
            do_settings_sections( 'myplugin-settings' );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="ms"/></form>
    </div>
    &lt;?php
}

Kod ini mula dengan… add_action Tambahkan fungsi untuk memuatkan menu admin_menu Hook. Ia akan dijalankan apabila menu dimuat turun dari pelayan belakang. myplugin_add_admin_menuDaftarkan menu bar atas baru yang bernama “My Plugins”. Selepas mengklik menu tersebut, WordPress akan memanggil… myplugin_settings_page Fungsi tersebut digunakan untuk merender kandungan halaman web.

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.

Menetapkan penyimpanan untuk medan dan pilihan

Hanya memiliki kerangka halaman sahaja tidak cukup; kita perlu membuat bidang borang pada halaman tersebut dan menyimpan nilai yang dimasukkan oleh pengguna dengan selamat. API Settings di WordPress direka khusus untuk tujuan ini, kerana ia dapat mengautomasikan proses pengesahan data, penyimpanan, dan penggunaan token keselamatan (nonce).

Pertama sekali, kita perlu mendaftar satu pilihan tetapan (setting option), satu blok konfigurasi (configuration block), dan juga bidang-bidang khusus (specific fields):

function myplugin_settings_init() {
    // 1. 注册一个设置选项到数据库
    register_setting( 'myplugin_settings_group', 'myplugin_options' );

// 2. 在页面内添加一个设置区块
    add_settings_section(
        'myplugin_section_main',
        '主要设置',
        null,
        'myplugin-settings'
    );

// 3. 在区块内添加一个具体的字段
    add_settings_field(
        'myplugin_field_text',
        '示例文本输入',
        'myplugin_field_text_render', // 渲染字段HTML的回调函数
        'myplugin-settings',
        'myplugin_section_main'
    );
}
add_action( 'admin_init', 'myplugin_settings_init' );

// 定义字段的HTML输出
function myplugin_field_text_render() {
    $options = get_option( 'myplugin_options' );
    $value = $options['text_field'] ?? '';
    ?>
    <input type='text' name='myplugin_options[text_field]' value='<?php echo esc_attr( $value ); ?>'>
    <?php
}

Melalui API ini, setelah borang dihantar, data akan disimpan secara automatik ke… wp_options Dalam jadual tersebut, yang bernama… myplugin_options Dalam rekod tersebut (sebuah array yang telah diserialisasi), pembangun boleh menggunakannya. get_option( ‘myplugin_options’ ) Dapatkan nilai-nilai tersebut dengan selamat, sama ada di bahagian hadapan (front end) atau belakang (back end).

Keselamatan plugin dan amalan terbaik

Membangunkan sebuah plugin yang popular memerlukan perhatian yang serius terhadap aspek keselamatan dan kualiti kod. Mengikuti amalan terbaik dapat membantu mengelakkan kelemahan yang sering berlaku dan meningkatkan pengalaman pengguna.

Pemverian data, pengekstrakan karakter khusus (escape), dan pembersihan data

Semua data yang datang dari pengguna atau sumber luar adalah tidak boleh dipercayai. Semasa menghantar data ke pelayar (bahagian hadapan), data tersebut perlu diubah suai (di-escape) untuk mencegah serangan skrip merentas tapak (cross-site scripting); semasa menyimpan data ke dalam pangkalan data (bahagian belakang), data tersebut perlu dibersihkan dan disahkan.

WordPress menyediakan banyak fungsi bantu. Untuk kandungan yang akan dihasilkan dalam format HTML, gunakan fungsi-fungsi tersebut dengan sewajarnya. esc_html(), esc_attr(), esc_url() Fungsi-fungsi seperti ini. Untuk output ke dalam variabel JavaScript, gunakan… wp_json_encode()Dalam operasi pangkalan data, sentiasa gunakan… $wpdb->prepare() Lakukan pertanyaan parametrisasi, atau gunakan alat seperti… sanitize_text_field(), intval() Fungsi-fungsi seperti ini bertujuan untuk membersihkan input yang diterima.

// 不安全的做法
echo $_GET['user_input'];

// 安全的做法:输出到HTML内容
echo esc_html( $_GET['user_input'] );

// 安全的做法:用于HTML属性
$url = esc_url( $_GET['url'] );
echo "<a href='/ms/$url/'>Pautan</a>";

// 安全的做法:清理后存入数据库
$clean_title = sanitize_text_field( $_POST['title'] );
update_post_meta( $post_id, ‘title’, $clean_title );

Pengurusan Antarabangsa dan Penyesuaian Tempatan (Internationalization and Localization Preparation)

Untuk membolehkan plugin digunakan oleh pengguna di seluruh dunia, persiapan untuk penggunaan dalam pelbagai bahasa (internationalization) perlu dilakukan dengan baik. Ini bermakna semua teks yang ditujukan untuk pengguna tidak boleh dikodkan secara langsung dalam kod, sebaliknya harus dibungkus menggunakan fungsi terjemahan.

WordPress menggunakan rangka kerja GNU gettext. Dalam kodnya, ia digunakan untuk mengurus terjemahan dan pengaturan bahasa. __() Terjemahkan dan kembalikan rentetan teks menggunakan: _e() Terjemahkan dan outputkan rentetan secara langsung. Pada masa yang sama, perlu mendefinisikannya dalam komen di bahagian atas plugin. Text DomainDan gunakannya semasa plugin dimuat. load_plugin_textdomain() Menggunakan fungsi untuk memuatkan fail terjemahan.

// 定义可翻译的字符串
$greeting = __( ‘Hello, World!', ‘my-first-plugin’ );
_e( ‘Settings saved successfully!', ‘my-first-plugin’ );

// 在插件初始化时加载翻译
function myplugin_load_textdomain() {
    load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’ );
}
add_action( ‘init’, ‘myplugin_load_textdomain’ );

Pembangun perlu menggunakan alat seperti Poedit untuk menghasilkan kandungan yang diperlukan. .pot Fail templat, untuk pembantu terjemahan membuat terjemahan dalam bahasa yang berbeza. .po Dan selepas dikompilasi. .mo Fail. Fail bahasa yang telah disediakan perlu diletakkan di dalam plugin. /languages/ Di dalam direktori tersebut… Ini merupakan langkah kritikal bagi plugin tersebut untuk memasuki pasaran antarabangsa.

RINGKASAN

Pembangunan plugin WordPress merupakan proses mengubah idea menjadi ciri-ciri yang berguna, dan intipatinya terletak pada pemahaman serta penggunaan sistem hook yang mahir. Prosesnya bermula dengan membuat fail utama yang mengandungi ulasan header yang betul, kemudian campur tangan dalam proses pelaksanaan melalui hook tindakan (action hooks), dan mengubah output data melalui hook penapis (filter hooks). Dengan menggunakan API Settings yang disediakan oleh WordPress, antara muka pentadbiran belakang boleh dibina dengan selamat dan mengikut standard yang ditetapkan. Pematuhan ketat terhadap garis panduan keselamatan (pemeriksaan, pengekstrakan, pembersihan data) serta piawaian internasionalisasi merupakan syarat penting bagi sesebuah plugin untuk menjadi matang, stabil, dan digunakan secara meluas. Ingatlah, plugin yang baik bukan sahaja mempunyai ciri-ciri yang kuat, tetapi juga selamat, cekap, dan mudah digunakan oleh pengguna di seluruh dunia.

FAQ - Soalan Lazim

Berapa banyak fail yang diperlukan sekurang-kurangnya untuk sebuah plugin?

Satu plugin memerlukan sekurang-kurangnya satu fail PHP. Cukup pastikan fail tersebut mengandungi ulasan kepala plugin WordPress yang betul, dan letakkannya di tempat yang sesuai. /wp-content/plugins/ Ia boleh diletakkan terus dalam direktori tersebut, atau dalam sebuah folder sub. WordPress akan mengenali dan mengaktifkannya.

Bagaimana untuk membaiki (debug) kod plugin saya?

Disyorkan untuk digunakan dalam persekitaran pembangunan. wp-config.php Aktifkan mod pembangunan (debug mode) untuk WordPress dalam fail tersebut. WP_DEBUG Konstanta ditetapkan kepada truePada masa yang sama, ia juga boleh disetkan. WP_DEBUG_LOGtrueCatatkan maklumat ralat ke… /wp-content/debug.log Fail-fail tersebut sebaiknya tidak ditampilkan secara langsung pada halaman web. Selain itu, sangat penting untuk menggunakan alat pembangun (developer tools) pada pelayar untuk melihat konsol (console) dan permintaan rangkaian (network requests).

Di mana sepatutnya pilihan tambahan (plugin options) berada?

Untuk tetapan pasangan kunci-nilai yang mudah, sangat disyorkan untuk menggunakan API Options di WordPress. add_option(), update_option(), get_option() Fungsi tersebut akan melakukan operasi, dan data akan disimpan dengan selamat. wp_options Dalam jadual pangkalan data. Untuk jumlah data yang besar dan terstruktur, anda boleh mempertimbangkan untuk membuat jadual pangkalan data yang disesuaikan, tetapi ini memerlukan pengurusan kitaran hidup yang lebih kompleks (dibuat semasa pemasangan dan dihapuskan semasa pembuangan).

Bagaimana untuk menjadikan plugin saya serasi dengan lebih banyak versi WordPress?

Semasa pembangunan, elakkan menggunakan fungsi-fungsi yang terlalu baru dan hanya disokong oleh versi WordPress yang lebih tinggi. Untuk fungsi-fungsi yang lebih baru yang ingin anda gunakan, periksa dan pastikan kefungsian mereka sebelum menggunakannya. function_exists() Lakukan pemeriksaan, dan sediakan pelan penurunan kualiti (degradation plan) yang sesuai. Ini terutama berlaku untuk plugin. readme.txt Dalam fail tersebut, dinyatakan dengan jelas versi minimum WordPress yang lulus ujian. Melakukan ujian secara berkala pada versi-versi WordPress yang berbeza merupakan cara terbaik untuk memastikan keserasian.