Asas Pembangunan Plugin WordPress
Sebelum meneroka kod dengan lebih mendalam, adalah sangat penting untuk memahami konsep asas dan struktur plugin WordPress. Sebuah plugin WordPress pada asasnya adalah skrip PHP tambahan yang berinteraksi dengan bahagian utama WordPress melalui sistem Hook yang disediakan oleh WordPress, dengan tujuan untuk memperluas atau mengubah fungsi laman web. Ia boleh berupa satu fail sahaja, atau ia boleh menjadi direktori lengkap yang mengandungi beberapa fail, fail gaya CSS, dan skrip JavaScript.
Tugas utama dalam pembangunan plugin adalah untuk membuat sebuah fail utama yang memenuhi piawaian yang ditetapkan. Biasanya, fail utama ini dinamakan berdasarkan nama plugin tersebut.my-custom-plugin.phpDi bahagian atas fail tersebut, blok ulasan maklumat plugin standard mesti disertakan. Ulasan ini bukan sahaja digunakan untuk menerangkan plugin anda kepada WordPress, tetapi juga akan dipaparkan di halaman pengurusan plugin di belakang tabir.
/**
* Plugin Name: 我的自定义功能扩展
* Plugin URI: https://example.com/my-custom-plugin
* Description: 这是一个用于演示的WordPress插件,用于添加自定义功能。
* Version: 1.0.0
* Author: 开发者名称
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-custom-plugin
*/ Dalam nota tersebut…Plugin NameIni adalah item wajib; yang lain adalah pilihan tetapi disyorkan untuk diisi. Selepas membuat fail ini, letakkannya di…/wp-content/plugins/Sebuah folder berasingan dalam direktori (contohnya…)my-custom-pluginDalam hal ini, anda boleh melihat dan mengaktifkannya pada halaman “Pembantu” (Plugins) di bahagian belakang WordPress.
Diperoleh daripada WEB\nDisyorkan untuk membaca. Dari permulaan hingga amalan: Panduan komprehensif untuk pembangunan plugin WordPress dan teknik-teknik lanjutan.。
Mekanisme operasi asas bagi plugin WordPress adalah berdasarkan konsep “hook” (tangkai). Terdapat dua jenis hook: action hook dan filter hook.(Action Hooks)And filter hooks(Filter Hooks)Hook acara membenarkan anda menjalankan kod yang disesuaikan pada titik masa tertentu, seperti semasa bahagian atas halaman dimuat atau apabila artikel diterbitkan.add_action()Fungsi tersebut akan memuatkan fungsi anda ke dalam “action hook”.
Hook filter membenarkan anda mengubah suai data yang dihasilkan semasa proses tersebut. Sebagai contoh, kandungan artikel akan melalui satu siri penapis sebelum dipaparkan.add_filter()Fungsi tersebut boleh mengubah data-data ini.
Internationalisasi dan lokalisasi merupakan komponen penting dalam plugin profesional. Dengan menggunakan…__( ‘文本’, ‘text-domain’ )或_e( ‘文本’, ‘text-domain’ )Fungsi tersebut mengelilingi semua teks yang kelihatan kepada pengguna, dan bersama-sama dengan bidang teks yang dimuat, ia membolehkan plugin menyokong berbilang bahasa.Text DomainIa mesti selaras dengan maklumat header plugin yang telah ditentukan, biasanya merupakan nama direktori plugin atau versi slug bagi nama fail utama plugin.
Cipta plugin fungsi pertama anda.
Mari kita mulakan dengan membuat sebuah plugin yang mudah, yang akan menambahkan satu lajur pengurusan khusus pada senarai artikel laman web, untuk menunjukkan statistik jumlah perkataan dalam setiap artikel. Contoh ini meliputi proses asas pembuatan plugin, penggunaan “hooks” (mekanisme pengaitan fungsi), dan pengeluaran kandungan yang selamat (secure output).
Pertama sekali, dalam apa yang anda katakan…/wp-content/plugins/Cipta sebuah folder baru dalam direktori tersebut, dan berikan nama ia sebagai…my-first-extensionDalam folder tersebut, buatlah fail utama.my-first-extension.phpDan tambahkan maklumat kepala plugin yang dinyatakan dalam bahagian sebelumnya.
Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Permulaan Pembangunan Plugin WordPress: Bina Modul Fungsi Khusus Anda Sendiri Dari Kosong。
Seterusnya, kita perlu menambahkan satu lajur baru ke dalam senarai pengurusan artikel. Ini melibatkan dua pengait tindakan (action hooks):manage_posts_columns和manage_posts_custom_columnYang pertama digunakan untuk mendefinisikan tajuk lajur baru, manakala yang kedua digunakan untuk mengisi kandungan setiap baris dalam lajur tersebut.
// 为文章列表添加“字数统计”列
function mfe_add_word_count_column( $columns ) {
$columns['word_count'] = __( '字数统计', 'my-first-extension' );
return $columns;
}
add_filter( 'manage_posts_columns', 'mfe_add_word_count_column' );
// 填充“字数统计”列的内容
function mfe_display_word_count_column( $column, $post_id ) {
if ( $column === 'word_count' ) {
$post_content = get_post_field( 'post_content', $post_id );
$word_count = str_word_count( strip_tags( $post_content ) );
echo esc_html( $word_count );
}
}
add_action( 'manage_posts_custom_column', 'mfe_display_word_count_column', 10, 2 ); Dalam segmen kod ini,mfe_add_word_count_columnFungsi tersebut menerima array lajur yang sedia ada dan menambahkan satu lajur baru ke dalamnya.word_countKunci, dan kembalikan array yang telah diubah suai.add_filterSambungkannya dengan…manage_posts_columnsPada penapis tersebut.mfe_display_word_count_columnFungsi tersebut pertama-tama memeriksa sama ada lajur yang sedang diproses adalah “word_count” yang telah kita tambahkan, kemudian mendapatkan kandungan artikel tersebut, dan menggunakan…strip_tags()Buang tag HTML, dan kemudian guna <str_word_count()Hitung jumlah perkataan (dalam kes bahasa Cina, ia adalah jumlah aksara), dan kemudian gunakannya.esc_html()Setelah melakukan pengekstrakan keselamatan, hasilnya adalah seperti berikut:
Plugin yang mudah ini sudah mempunyai fungsi asas, tetapi sebuah plugin yang lebih profesional sepatutnya mempertimbangkan untuk melakukan beberapa tindakan ketika ia diaktifkan atau dinonaktifkan. Sebagai contoh, kita boleh membuat jadual pangkalan data yang khusus atau membersihkan pilihan sementara. Ini boleh dicapai dengan mendaftarkan “hook” (mekanisme pengaktifan/penonaktifan) yang sesuai.
// 插件激活时执行的操作
function mfe_plugin_activation() {
// 例如:添加一个版本号选项,用于后续升级判断
if ( ! get_option( 'mfe_plugin_version' ) ) {
add_option( 'mfe_plugin_version', '1.0.0' );
}
// 触发一个自定义动作,供其他开发者扩展
do_action( 'mfe_plugin_activated' );
}
register_activation_hook( __FILE__, 'mfe_plugin_activation' );
// 插件停用时执行的操作
function mfe_plugin_deactivation() {
// 例如:清除计划任务或临时数据
// 注意:通常不在停用时删除用户数据(如表)
}
register_deactivation_hook( __FILE__, 'mfe_plugin_deactivation' ); Sila ambil perhatian.register_activation_hook和register_deactivation_hookPerlu path lengkap fail utama (main file).FILEConstant) sebagai parameter pertama. Logik untuk mengaktifkan, menonaktifkan, dan membuang (pembuangan berlaku apabila pengguna memadamkan plugin) perlu diuruskan secara berasingan.
Membangunkan halaman tetapan untuk plugin
Sebuah plugin yang lengkap dengan ciri-ciri biasanya memerlukan pilihan konfigurasi untuk pengguna. Cara yang paling standard adalah dengan membuat halaman tetapan di bahagian belakang (backend) WordPress. Ini boleh dilakukan dengan menggunakan…add_menu_page()或add_options_page()Fungsi-fungsi seperti ini digunakan untuk melaksanakan tugas tertentu.
Mari kita buat terlebih dahulu satu item menu peringkat atas (top-level menu item). Dalam contoh di bawah ini,mfe_create_admin_menuPenggunaan fungsiadd_menu_page()Mari tambah sebuah halaman baru. Fungsi ini memerlukan tajuk halaman, tajuk menu, kebenaran yang diperlukan, slug menu, fungsi panggil balik untuk kandungan halaman yang akan dihasilkan, URL ikon, dan kedudukan dalam menu.
Diperoleh daripada WEB\nDisyorkan untuk membaca. Dari awal: Panduan lengkap untuk pembangunan plugin WordPress dan perkongsian amalan terbaik.。
// 创建后台管理菜单
function mfe_create_admin_menu() {
add_menu_page(
__( '我的扩展设置', 'my-first-extension' ), // 页面标题
__( '我的扩展', 'my-first-extension' ), // 菜单标题
'manage_options', // 权限(管理员)
'mfe-settings', // 菜单slug
'mfe_settings_page_html', // 显示页面内容的函数
'dashicons-admin-generic', // 图标
80 // 位置
);
}
add_action( 'admin_menu', 'mfe_create_admin_menu' ); Seterusnya, kita perlu mendefinisikan…mfe_settings_page_htmlFungsi tersebut digunakan untuk merender kandungan halaman web. Sebuah halaman tetapan yang profesional sepatutnya menggunakan API tetapan standard WordPress, yang bertanggungjawab untuk mengurus proses penghantaran borang, pengesahan data, serta mengatasi isu-isu keselamatan yang berkaitan. Pertama sekali, kita perlu menggunakan…register_setting()Daftar sebuah kumpulan tetapan (setting group) dan beberapa bidang (fields).
// 初始化设置
function mfe_settings_init() {
// 注册一个新的设置组 “mfe_settings_group” 到页面 “mfe-settings”
register_setting( 'mfe-settings', 'mfe_settings_options' );
// 在设置组内添加一个区域(Section)
add_settings_section(
'mfe_settings_section',
__( '基本设置', 'my-first-extension' ),
'mfe_settings_section_cb',
'mfe-settings'
);
// 在区域内添加一个字段
add_settings_field(
'mfe_field_api_key',
__( 'API密钥', 'my-first-extension' ),
'mfe_field_api_key_cb',
'mfe-settings',
'mfe_settings_section',
[ 'label_for' => 'mfe_field_api_key' ]
);
}
add_action( 'admin_init', 'mfe_settings_init' ); Kemudian, kita perlu mendefinisikan fungsi panggilan balik kawasan (region callback) dan fungsi panggilan balik bidang (field callback) untuk menghasilkan kod HTML. Fungsi panggilan balik bidang sangat penting kerana ia bertanggungjawab untuk merender kotak masukan dalam borang dan memastikan bahawa nilai yang dimasukkan adalah selaras dengan tetapan yang disimpan.
// 设置区域的说明文本
function mfe_settings_section_cb( $args ) {
?>
<p id="<?php echo esc_attr( $args['id'] ); ?>"><?php esc_html_e( '请在此配置插件的基本参数。', 'my-first-extension' ); ?></p>
<?php
}
// API密钥字段的回调函数
function mfe_field_api_key_cb( $args ) {
// 从已注册的设置选项中获取值
$options = get_option( 'mfe_settings_options' );
$value = $options[ $args['label_for'] ] ?? '';
?>
<input type="text"
id="<?php echo esc_attr( $args['label_for'] ); ?>"
name="mfe_settings_options[<?php echo esc_attr( $args['label_for'] ); ?>]"
value="<?php echo esc_attr( $value ); ?>"
class="regular-text">
<p class="description"><?php esc_html_e( '请输入您的服务API密钥。', 'my-first-extension' ); ?></p>
<?php
} Akhir sekali, buat fungsi untuk halaman tetapan utama, dan gunakannya.settings_fields()和do_settings_sections()Keluarkan seluruh borang dengan selamat.
// 设置页面的HTML结构
function mfe_settings_page_html() {
// 检查用户权限
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<div class="wrap">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
<form action="/ms/options.php/" method="post" data-trp-original-action="options.php">
<?php
// 输出安全字段、区域和字段
settings_fields( 'mfe-settings' );
do_settings_sections( 'mfe-settings' );
submit_button( __( '保存设置', 'my-first-extension' ) );
?>
<input type="hidden" name="trp-form-language" value="ms"/></form>
</div>
<?php
} Dengan cara ini, halaman tetapan dibuat, dan proses pengesahan, pembersihan, serta penyimpanan semua data daripada borang-borang tersebut dilakukan secara automatik oleh API Tetapan WordPress, dan data tersebut disimpan dalam…wp_optionsDalam jadual tersebut, yang bernama…mfe_settings_optionsDalam pilihan tersebut, keselamatan dan keselesaan telah ditingkatkan dengan ketara.
Keselamatan plugin dan amalan terbaik
Membangunkan sebuah plugin yang profesional, selamat, dan mudah diselenggara adalah tugas yang penting, dan ia perlu mengikuti satu siri amalan terbaik. Prinsip utama yang perlu dipegang adalah: Jangan pernah mempercayai input daripada pengguna. Semua data yang datang dari sumber luar (seperti…$_GET、$_POST、$_COOKIEData daripada sumber-sumber seperti sistem pengurusan pangkalan data juga mesti melalui proses pengesahan, pembersihan, dan pengekstrakan yang sesuai sebelum dihasilkan, digunakan, atau disimpan.
Pemverianan dan Pembersihan Data: Sebelum menggunakan data untuk membuat penilaian logik, perlu memastikan bahawa data tersebut memenuhi format yang dijangka. Sebagai contoh, jika sebuah medan dijangka mengandungi nombor, gunakan kaedah yang sesuai untuk memeriksa sama ada nilai yang dimasukkan benar-benar merupakan nombor.intval()或is_numeric()WordPress menyediakan banyak fungsi bantu, sepertisanitize_text_field()Digunakan untuk membersihkan rentetan teks.sanitize_email()Digunakan untuk membersihkan alamat e-mel.
Data Escaping: Semasa mengeluarkan sebarang data ke dalam HTML, JavaScript, atau URL, data tersebut mesti di-escap untuk mencegah serangan skrip merentas tapak (Cross-Site Scripting, XSS).esc_html()Outputkan teks murni ke dalam HTML,esc_attr()Output ke atribut HTML,esc_url()Keluar URL.wp_json_encode()Pakaian yang serasiwp_slash()Keluarkan ke dalam JavaScript.
Satu kesilapan keselamatan yang sering berlaku adalah menggunakan pemboleh ubah yang tidak disahkan secara terus dalam kueri pangkalan data, yang boleh menyebabkan masalah SQL injection. Jangan pernah menyusun ayat SQL secara manual. Sebaliknya, gunakan ciri-ciri yang disediakan oleh WordPress untuk melakukan ini.$wpdbKelas dan kaedah persiapan pertanyaan (query preparation methods).
global $wpdb;
$user_input = $_POST['search_term'];
// 错误做法:直接拼接
// $sql = “SELECT * FROM {$wpdb->posts} WHERE post_title LIKE ‘%$user_input%’”;
// 正确做法:使用prepare方法
$sql = $wpdb->prepare(
“SELECT * FROM {$wpdb->posts} WHERE post_title LIKE %s”,
‘%’ . $wpdb->esc_like( $user_input ) . ‘%’
);
$results = $wpdb->get_results( $sql ); Semakan Keistimewaan: Sebelum sebarang operasi pengurusan, pengubahsuaian data, atau pengeluaran maklumat sensitif dilakukan oleh plugin, perlu diperiksa terlebih dahulu sama ada pengguna semasa mempunyai kuasa untuk melaksanakan operasi tersebut.current_user_can( $capability )或check_admin_referer()Dan lain-lain untuk pemeriksaan.
Skrip dan fail gaya (style sheets) perlu dimuat turun secara berurutan: Jangan sekali-kali memuatkannya terus-menerus dalam plugin.<link>或<script>Tag digunakan untuk memasukkan fail CSS dan JS.wp_enqueue_style()和wp_enqueue_script()Fungsi tersebut, dan pastikan ia digunakan dalam hook yang sesuai (seperti…)wp_enqueue_scriptsUntuk penggunaan di bahagian hadapan (front end).admin_enqueue_scriptsIa digunakan untuk dijalankan pada latar belakang (backend). Ini dapat mengelakkan konflik dan memastikan hubungan kebergantungan (dependencies) dimuat dengan betul.
Pengaturan Kod dan Konvensyen Penamaan: Gunakan awalan yang unik untuk fungsi, kelas, pemboleh ubah, dan nama pilihan plugin anda (seperti…)mfe_Ini adalah untuk mengelakkan konflik dengan topik, plugin lain, atau kod asas WordPress. Organisasi plugin yang kompleks ke dalam beberapa fail, serta penggunaan pengaturcaraan berorientasikan objek (Object-Oriented Programming/OOP), dapat meningkatkan keterbacaan dan kebolehgunaan semula kod.
Menyediakan fungsi pembuangan dan pembersihan: Jika plugin tersebut telah mencipta jadual dalam pangkalan data atau pilihan khusus, adalah penting untuk mempertimbangkan penyediaan fungsi pembersihan apabila pengguna memilih untuk “menghapus” plugin tersebut (bukan hanya “menonaktifkannya”). Ini boleh dilakukan melalui fail pembuangan yang berasingan. Dalam fail utama plugin, fungsi tersebut boleh ditulis untuk melaksanakan tindakan pembuangan dan pembersihan yang diperlukan.register_uninstall_hook( FILE, ‘mfe_plugin_uninstall’ )Untuk mendaftar fungsi pembuangan (deinstallation function), tetapi kaedah yang lebih biasa adalah dengan membuat satu fail dalam direktori plugin.uninstall.phpApabila anda menghapuskan sesebuah plugin di WordPress, fail tersebut akan dihapuskan secara automatik oleh sistem.
RINGKASAN
Pembangunan plugin untuk WordPress merupakan proses yang menggabungkan pemikiran yang teratur (struktured thinking) dengan pemahaman yang mendalam tentang arkitektur asas WordPress. Dari menulis maklumat header plugin yang memenuhi standard, hingga memahami dan menggunakan dengan mahir fungsi “action hooks” dan “filter hooks”, semua ini merupakan asas untuk membina sebarang tambahan (extension) kepada fungsi WordPress. Untuk mencipta sebuah plugin yang berguna, bukan sahaja fungsi pada bahagian hadapan (frontend) perlu dilaksanakan, tetapi juga antara muka pengaturan pada bahagian belakang (backend) yang jelas dan selamat, yang boleh dilakukan dengan cekap melalui API pengaturan WordPress.
Keselamatan merupakan aspek yang sangat penting sepanjang proses pembangunan sesuatu aplikasi, bermula dari pengesahan input, pembebasan data (output escaping), pemeriksaan hak akses, hingga operasi pangkalan data yang selamat. Setiap langkah dalam proses ini tidak boleh diabaikan. Dengan mengikuti amalan terbaik, seperti mengatur urutan penggunaan skrip dengan betul, menggunakan prefiks yang unik, dan menyusun struktur kod yang jelas, plugin yang anda buat akan menjadi lebih kukuh, mudah diselenggara, dan dapat berfungsi dengan baik dalam ekosistem WordPress yang besar. Melalui langkah-langkah yang diberikan dalam panduan ini, anda telah mempelajari pengetahuan dan kemahiran asas yang diperlukan untuk membina sebuah plugin WordPress peringkat profesional dari awal.
FAQ - Soalan Lazim
Bagaimana untuk menambahkan kod ringkas (short code) kepada plugin saya?
Kod pendek membenarkan pengguna untuk dengan mudah memasukkan ciri-ciri tambahan (plugin) ke dalam artikel atau halaman.add_shortcode()Fungsi ini digunakan untuk mendaftarkan kod pendek anda.
Cipta sebuah fungsi panggilan balik (callback function) yang mengendalikan logik kod pendek (short code logic), di mana fungsi tersebut menerima atribut (attributes) sebagai parameter.$atts)dan kandungan($content)参数,并返回处理后的HTML。记住,短码回调函数必须返回(return)内容,而不是直接输出(echo)。返回的内容也需要进行适当的转义以确保安全。
Di mana patut menyimpan pilihan tambahan (plugin options)?
Untuk tetapan pasangan kunci-nilai yang mudah, sangat disyorkan untuk menggunakan API Options WordPress.add_option()、get_option()和update_option()Fungsi tersebut. Data-data ini akan disimpan secara automatik.wp_optionsDalam jadual pangkalan data.
Jika plugin anda memerlukan untuk menyimpan sejumlah besar data berstruktur (seperti entri borang, log), anda harus mempertimbangkan untuk membuat jadual pangkalan data yang diperibadikan.dbDelta()Fungsi-fungsi ini digunakan untuk memastikan bahawa proses penciptaan dan pengemaskinan struktur jadual adalah selamat serta serasi dengan sistem. Penciptaan jadual khusus (custom tables) biasanya dilakukan melalui pengaktifan hook (hook) dalam plugin.
Bagaimanakah plugin saya boleh menjadi serasi dengan plugin atau tema lain?
Kunci untuk meningkatkan keserasian adalah dengan mengikuti standard pengkodan WordPress, menggunakan prefiks yang unik, dan menyediakan titik pengembangan melalui Hook. Elakkan daripada membuat perubahan langsung pada fail asas atau variabel global.
Dalam plugin anda, gunakan…do_action()或apply_filters()Cipta pengaitan (hooks) yang diperibadikan untuk membenarkan pembangun lain mengubah atau memperluas fungsi plugin anda. Pada masa yang sama, sebelum menjalankan operasi yang mungkin menyebabkan konflik (seperti menambah gaya atau skrip), lakukan pemeriksaan syarat atau sediakan pilihan untuk mematikannya.
Bagaimana untuk menambahkan mekanisme kemas kini kepada sebuah plugin?
Untuk plugin yang disimpan dalam direktori plugin rasmi WordPress, proses pengemaskinian dilakukan secara automatik. Bagi plugin persendirian atau komersial, anda perlu membuat alat pemeriksaan pengemaskinian yang disesuaikan sendiri.
Ini biasanya melibatkan penciptaan sebuah kelas yang akan memeriksa secara berkala untuk versi terbaru pada pelayan jauh anda, dan membenarkan pengguna untuk mengemas kini dengan satu klik sahaja. Anda boleh merujuk kepada perpustakaan seperti “Plugin Update Checker” sebagai rujukan, atau anda juga boleh melaksanakannya sendiri. Intipatinya adalah menggunakan mekanisme yang sesuai untuk memantau dan mengurus kemas kini tersebut.set_site_transient()Hook (seperti…)pre_set_site_transient_update_pluginsGunakan kaedah yang sesuai untuk menyisipkan maklumat kemas kini anda. Pastikan bahawa pelayan kemas kini tersebut adalah selamat dan boleh dipercayai.
Selanjutnya, apa yang perlu kita lakukan seterusnya?
Bacaan lanjutan dan pengetahuan praktikal
Konten berikut berkaitan dengan topik artikel ini dan sesuai untuk bacaan lanjut. Lebih baik untuk memulakan dengan artikel yang paling dekat dengan masalah anda sekarang, dan kemudian secara bertahap mengembangkan ke topik yang berkaitan, kerana ini biasanya akan memberikan hasil yang lebih baik.
- Penerangan Terperinci Mengenai Proses Pembinaan Laman Web: Panduan Profesional Dari Analisis Keperluan Hingga Pelaksanaan dan Penyebaran
- Panduan Permulaan Pembinaan Laman Web: Menguasai Keseluruhan Proses Pembangunan Laman Web Moden Dari Kosong Ke Sifar
- Panduan Pembangunan Plugin WordPress: Dari Kosong Ke Sifar, Cipta Plugin Custom Pertama Anda
- Apa itu Subtheme WordPress?
- Menjadi Pembangun Plugin WordPress: Panduan Lengkap Dari Awal Hingga Akhir