Bermula dari kosong: Persiapan kerja dan pembinaan persekitaran
Sebelum memulakan penulisan plugin pertama, adalah penting untuk melakukan persiapan yang menyeluruh. Ini termasuk memahami struktur asas plugin WordPress, mengatur persekitaran pembangunan tempatan yang selamat, dan memahami falsafah utama pembangunan plugin.
Sebuah plugin WordPress yang tipikal ialah sesuatu yang terletak di… /wp-content/plugins/ Folder yang berdiri sendiri dalam direktori tersebut mengandungi sebuah fail utama PHP yang mempunyai header khusus. Fail utama ini bukan sahaja mengandungi maklumat meta tentang plugin, tetapi juga merupakan titik masuk utama untuk semua fungsi plugin tersebut. Terdapat dua cara untuk memulakan plugin: satu adalah dengan menggunakan kombinasi fungsi berorientasikan proses, dan yang lain adalah dengan menggunakan struktur kelas berorientasikan objek. Cara yang kedua lebih disukai dalam pembangunan plugin moden kerana ia menawarkan pengasingan (encapsulation) dan organisasi kod yang lebih baik.
Persekitaran pembangunan tempatan sangat penting untuk pembangunan yang cekap. Kami mengesyorkan penggunaan alat seperti XAMPP, Local by Flywheel, atau Docker untuk membina persekitaran operasi yang mengintegrasikan Apache/Nginx, MySQL, dan PHP. Ini membolehkan anda melakukan ujian dan penyelarasan dengan bebas tanpa mempengaruhi laman web yang berada dalam talian.
Diperoleh daripada WEB\nDisyorkan untuk membaca. Dari awal: Panduan lengkap untuk pembangunan plugin WordPress dan perkongsian amalan terbaik.。
Membina kerangka plugin: Struktur dan fail-fail utama
Bahagian ini akan menerangkan secara terperinci bagaimana untuk membuat kerangka plugin asas yang mematuhi spesifikasi WordPress dari awal. Sebuah kerangka yang baik merupakan asas bagi plugin yang stabil, selamat, dan mudah diselenggara.
Mencipta fail plugin utama yang diperlukan
Kehidupan sebuah plugin bermula dari sebuah fail utama. Nama fail ini biasanya sama dengan nama folder plugin tersebut. Sebagai contoh, jika nama folder plugin anda adalah… my-custom-pluginJadi, fail utama boleh dinamakan sebagai my-custom-plugin.phpDi bahagian atas fail ini, anda mesti menggunakan blok ulasan yang mematuhi format tertentu untuk menyatakan maklumat plugin. Ini adalah kunci bagi WordPress untuk mengenali plugin tersebut dan menunjukkannya dalam senarai pengurusan latar belakang.
Berikut adalah contoh header fail plugin yang paling asas:
<?php
/**
* 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
* Domain Path: /languages
*/ Dalam ulasan ini, “Nama Plugin” adalah wajib diisi, manakala bidang-bidang lain adalah pilihan tetapi disyorkan untuk diisi. “Domain Tekst” dan “Laluan Domain” digunakan untuk pengantarabangsaan plugin (i18n), bagi mempersiapkan proses terjemahan ke dalam pelbagai bahasa pada masa akan datang.
Fail dan direktori untuk plugin organisasi
Seiring dengan peningkatan fungsi plugin, tidak digalakkan untuk menumpuk semua kod dalam satu fail utama. Struktur plugin yang teratur biasanya terdiri daripada beberapa direktori dan fail sub. Sebuah struktur yang biasa adalah seperti berikut:
Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Lengkap Pembangunan Plugin WordPress: Daripada Asas Hingga Pelancaran Ke Aplikasi Sebenar。
my-custom-plugin/
├── my-custom-plugin.php # 主插件文件(入口)
├── includes/ # 核心功能类文件目录
│ ├── class-core.php # 核心逻辑类
│ └── class-admin.php # 后台管理逻辑类
├── admin/ # 后台相关文件
│ ├── css/ # 后台样式表
│ ├── js/ # 后台JavaScript
│ └── partials/ # 后台模板片段
├── public/ # 前端相关文件
│ ├── css/
│ ├── js/
│ └── partials/
├── assets/ # 公共资源(如图标、图片)
├── languages/ # 国际化语言包(.po, .mo文件)
└── uninstall.php # 插件卸载清理脚本 在 my-custom-plugin.php Dalam fail utama, kita biasanya tidak menulis logik perniagaan secara langsung, tetapi menggunakannya sebagai “pengaktif” (launcher) yang bertanggungjawab untuk mengandungi fail-fail yang diperlukan dan memulakan kelas-kelas utama.
// 防止直接文件访问
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// 定义插件路径常量,方便在其他文件中引用
define( 'MY_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
define( 'MY_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
// 包含核心类文件
require_once MY_PLUGIN_PATH . 'includes/class-core.php';
require_once MY_PLUGIN_PATH . 'includes/class-admin.php';
// 初始化插件
function my_custom_plugin_init() {
$plugin_core = new My_Plugin_Core();
$plugin_admin = new My_Plugin_Admin();
// 执行初始化操作...
}
add_action( 'plugins_loaded', 'my_custom_plugin_init' ); Pautan ke inti WordPress: Hook untuk Aksi dan Penapis
Sistem plugin WordPress sangat kuat kerana ia menyediakan sebilangan besar titik acara (event points) yang membolehkan pembangun mengubah atau meningkatkan fungsi plugin tersebut tanpa perlu mengubah kod asas WordPress. Mekanisme ini dikenali sebagai “Hook” (Pengait), yang terutamanya dibahagikan kepada dua kategori: Action (Tindakan) dan Filter (Penapis). Hook ini berfungsi sebagai jambatan antara plugin dan kod asas WordPress.
Mengerti dan menggunakan “action hooks”
Hook untuk tindakan membenarkan anda menjalankan kod yang disesuaikan apabila acara tertentu berlaku. Sebagai contoh, apabila sebuah artikel diterbitkan, apabila pengguna log masuk, atau apabila halaman tertentu dalam pentadbiran laman web dimuat. add_action() Fungsi tersebut boleh “memuatkan” (mount) fungsi anda pada titik-titik pengaitan (hooks) ini.
Jika anda ingin menambahkan kenyataan hak cipta secara automatik di bahagian bawah artikel, anda boleh menggunakan the_content Hook ini sebenarnya merupakan sejenis penapis (filter), tetapi cara penggunaannya serupa dengan fungsi “aksi” (action). Contoh klasik yang sering digunakan untuk menjelaskannya adalah menghantar e-mel ucapan selamat kepada pengguna setelah pendaftaran berjaya.
// 这是一个动作钩子的使用示例
function my_plugin_send_welcome_email( $user_id ) {
$user = get_userdata( $user_id );
$to = $user->user_email;
$subject = '欢迎加入我们的网站!';
$message = '亲爱的' . $user->display_name . ',感谢您注册!';
wp_mail( $to, $subject, $message );
}
// 将函数挂载到`user_register`这个动作钩子上
add_action( 'user_register', 'my_plugin_send_welcome_email' ); Menguasai cara menggunakan penapis (filters)
Hook filter membenarkan anda mengubah data. Apabila WordPress menjalankan sesuatu proses, ia akan menghantar data tertentu melalui satu siri filter. Plugin anda boleh menangkap data tersebut, mengubahnya, dan kemudian mengembalikannya. add_filter() Fungsi tersebut dilaksanakan untuk mencapai tujuan yang diinginkan.
Contoh yang paling biasa adalah pengubahsuaian pada kandungan yang dipaparkan dalam artikel. Sebagai contoh, gambar khas akan ditambahkan secara automatik di hadapan setiap artikel sebagai gambar pengenalan.
Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Permulaan Pembangunan Plugin WordPress: Bina Modul Fungsi Khusus Pertama Anda Dari Kosong。
function my_plugin_prepend_featured_image_to_content( $content ) {
// 只在主循环的单篇文章页面生效
if ( is_single() && in_the_loop() && is_main_query() ) {
$featured_image = get_the_post_thumbnail( null, 'medium', array( 'class' => 'alignleft' ) );
if ( $featured_image ) {
$content = $featured_image . $content;
}
}
return $content;
}
// 将函数挂载到`the_content`这个过滤器钩子上
add_filter( 'the_content', 'my_plugin_prepend_featured_image_to_content' ); Mengimplementasikan fungsi plugin: Integrasi antara bahagian pentadbiran (backend) dan bahagian pengguna (frontend)
Sebuah plugin yang lengkap biasanya memerlukan interaksi dengan pengguna, yang bermakna anda perlu membuat antara muka pengurusan untuk menguruskan tetapan, dan mungkin juga perlu menambahkan fungsi atau kandungan baru pada halaman frontend.
Create a background settings page.
Menyediakan halaman tetapan latar belakang yang jelas untuk plugin adalah kunci kepada pengalaman pengguna yang baik. WordPress menyediakan pelbagai API untuk menambah menu utama atau sub-menu. Proses ini biasanya melibatkan dua langkah: mendaftar item menu, dan mendefinisikan fungsi panggilan balik (callback function) yang berkaitan dengan item menu tersebut untuk menghasilkan kandungan halaman yang ditunjukkan.
Berikut adalah contoh bagaimana menambahkan item sub-menu di bawah menu utama “Setelan” (Settings):
class My_Plugin_Admin {
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(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限
'my-plugin-settings', // 菜单slug
array( $this, 'render_settings_page' ) // 回调函数
);
}
public function register_settings() {
// 注册一个设置选项
register_setting( 'my_plugin_settings_group', 'my_plugin_option_name' );
// 添加一个设置区块
add_settings_section( 'my_plugin_main_section', '主要设置', null, 'my-plugin-settings' );
// 向区块中添加一个字段
add_settings_field(
'my_plugin_text_field',
'示例文本字段',
array( $this, 'render_text_field' ),
'my-plugin-settings',
'my_plugin_main_section'
);
}
public function render_settings_page() {
?>
<div class="wrap">
<h1>Tetapan-tetapan plugin saya</h1>
<form action="/ms/options.php/" method="post" data-trp-original-action="options.php">
<?php
settings_fields( 'my_plugin_settings_group' );
do_settings_sections( 'my-plugin-settings' );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="ms"/></form>
</div>
<?php
}
public function render_text_field() {
$option = get_option( 'my_plugin_option_name' );
echo '<input type="text" name="my_plugin_option_name" value="' . esc_attr( $option ) . '" />';
}
} Keluarkan fungsi tersebut ke bahagian hadapan (frontend) laman web.
Terdapat pelbagai cara untuk melaksanakan fungsi pada bahagian hadapan (front end), seperti menggunakan kod pendek (Shortcode), widget, atau memodifikasi output sedia ada melalui API. Kod pendek merupakan cara yang mudah dan berkesan, yang membenarkan pengguna untuk memanggil fungsi tambahan (plugin) dengan hanya memasukkan satu tag yang ringkas dalam editor artikel atau halaman.
Untuk membuat kod pendek, anda perlu menggunakan alat atau teknik tertentu. add_shortcode() Fungsi:
// 定义一个简单的短代码,用于显示一个问候语
function my_plugin_greeting_shortcode( $atts ) {
// 解析短代码属性
$atts = shortcode_atts( array(
'name' => '访客',
), $atts, 'greeting' );
// 返回输出内容
return '<p class="my-plugin-greeting">Hello, '. esc_html($atts['name'])'. ‘!</p>'php
add_shortcode('greeting', 'my_plugin_greeting_shortcode'); Pengguna hanya perlu memasukkan kandungan dalam editor artikel. [greeting name="张三"]Pada bahagian hadapan (front end), segmen teks “Hai, Zhang San!” akan dipaparkan.
RINGKASAN
Pembangunan plugin WordPress merupakan proses memasukkan idea-idea khusus ke dalam ekosistem yang besar ini, di mana teknologi utama terletak pada pemahaman dan penggunaan mekanisme “action” serta “filter hook”. Pembangunan yang berjaya bermula dengan struktur fail yang jelas dan modular, yang menyediakan asas yang kukuh untuk penyelenggaraan dan pengembangan yang seterusnya. Dengan mencipta halaman tetapan di bahagian belakang (backend), plugin dapat dibuat lebih mesra pengguna dan mudah diset up; selain itu, fungsi-fungsi dapat diintegrasikan dengan lancar ke bahagian depan (frontend) laman web melalui kod pendek (shortcodes), alat tambahan (widgets), atau API khusus. Keselamatan, keserasian dengan bahasa antarabangsa (internationalization), dan kualiti kod merupakan aspek penting yang perlu diberi perhatian sepanjang proses pembangunan. Mengikuti standard pengaturcaraan WordPress dan amalan terbaik bukan sahaja dapat memastikan plugin berfungsi dengan stabil, tetapi juga membolehkannya menyatu dengan lebih baik ke dalam ekosistem tersebut, seterusnya memberikan perkhidmatan yang lebih baik kepada lebih ramai pengguna.
FAQ - Soalan Lazim
Berapa dalam pengetahuan asas PHP yang diperlukan untuk membangunkan plugin WordPress?
Untuk membangunkan sebuah plugin yang mudah, anda hanya perlu memiliki pengetahuan asas PHP seperti pemboleh ubah (variables), fungsi (functions), pernyataan syarat (conditional statements), dan gelung (loops). Namun, untuk membangunkan plugin peringkat perniagaan yang mempunyai ciri-ciri yang kompleks, selamat, dan cekap, anda perlu mempunyai pemahaman yang lebih mendalam, termasuk tetapi tidak terhad kepada pengaturcaraan berorientasikan objek (Object-Oriented Programming/OOP) dan API teras WordPress (seperti kelas yang berkaitan dengan operasi pangkalan data). wpdbPengetahuan tentang API permintaan HTTP, amalan terbaik keselamatan (seperti pengesahan data, pengekstrakan kod berbahaya, pencegahan serangan SQL injection dan CSRF), serta asas JavaScript dan CSS diperlukan untuk interaksi pengguna pada bahagian hadapan (frontend).
Disarankan untuk bermula dengan mengubah suai plugin sedia ada atau membina fungsi yang mudah, kemudian secara beransur-ansur mempelajari lebih lanjut.
Bagaimana untuk memastikan bahawa plugin yang saya bangunkan adalah selamat?
Memastikan keselamatan plugin adalah tugas yang melibatkan beberapa tahap. Pertama sekali, semua input yang datang dari pengguna atau sumber luar (seperti data borang, parameter URL, Cookie) perlu disemak dan dibersihkan dengan teliti. Gunakan fungsi-fungsi yang disediakan oleh WordPress untuk melakukan ini. sanitize_text_field(), esc_html(), esc_url() 和 wp_kses() dan sebagainya.
Kedua, semasa melakukan operasi pada pangkalan data, pastikan anda menggunakan… $wpdb Metode yang disediakan oleh kelas (seperti…) prepare() Untuk mencegah serangan SQL injection, langkah-langkah tertentu perlu diambil. Semasa mengeluarkan sebarang data ke bahagian hadapan (frontend), proses pengelakan (escaping) yang sesuai mesti dilakukan. Bagi operasi yang melibatkan kawalan akses (permissions), gunakan sentiasa fungsi-fungsi pemeriksaan keupayaan (capability checking functions) seperti… current_user_can()Selain itu, penggunaan nilai bukan-CE (nonce) untuk mengesahkan niat permintaan dapat mencegah penipuan permintaan merentas tapak (Cross-Site Request Forgery/CSRF).
Setelah pembangunan plugin selesai, bagaimanakah cara untuk mengedarkannya dan mengemas kini ia?
Terdapat dua cara utama untuk mengedarkan plugin: melalui direktori plugin rasmi WordPress, atau dengan menyediakan pautan muat turun secara langsung di laman web sendiri. Jika anda ingin plugin dapat dipasang dengan satu klik oleh pengguna di panel kawalan mereka dan menerima kemas kini automatik, plugin tersebut perlu dihantar ke direktori rasmi. Ini memerlukan kod plugin mematuhi lesen GPLv2 (atau versi yang lebih baru), dan melalui pemeriksaan keselamatan serta kualiti kod yang ketat.
Setelah anda menghantar kod plugin anda, WordPress akan membaca kod tersebut daripada repositori Subversion (SVN) rasminya. Anda perlu mengemaskini nombor “Version” dalam nota header fail utama di repositori SVN, dan kemudian menghantar tag baru yang mengandungi nombor versi tersebut untuk memicu notifikasi pembaruan.
Untuk plugin komersial, perkhidmatan kemas kini biasanya dibina pada pelayan sendiri. Ini melibatkan penulisan alat pemeriksaan kemas kini, yang menggunakan mekanisme “hook” (seperti…) pre_set_site_transient_update_pluginsBerintegrasi dengan sistem kemas kini WordPress, membandingkan maklumat versi pada pelayan jauh dan menyediakan paket kemas kini.
Bagaimanakah nama kelas dan fungsi dalam plugin dapat dielakkan daripada bertembung dengan plugin lain?
Mengelakkan konflik penamaan adalah keperluan asas dalam pembangunan plugin profesional. Amalan terbaik adalah dengan menggunakan prefiks. Gunakan satu prefiks yang unik dan deskriptif untuk semua kelas, fungsi, konstanta, dan bahkan variabel global (usahakan untuk mengelakkan penggunaannya) dalam plugin anda. Prefiks tersebut boleh jadi merupakan singkatan atau nama penuh nama syarikat anda atau nama plugin tersebut.
Sebagai contoh, jika nama plugin anda adalah “Awesome Gallery”, awalan fungsi anda boleh menjadi “awesomegallery_”. ag_ 或 awesome_gallery_Nama kelas boleh menjadi… AG_Core 或 Awesome_Gallery_Admin。
Cara yang lebih baik adalah untuk mengapsulkan kod dalam sebuah kelas, supaya kebanyakan fungsi wujud dalam bentuk kaedah kelas (class methods). $this->method()), seterusnya mengelakkan pencemaran ruang nama global. Bagi fungsi yang perlu didefinisikan dalam ruang nama global, pastikan anda menggunakan prefiks yang panjang dan unik.
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.
- Panduan Pembangunan Plugin WordPress: Dari Kosong Ke Sifar, Cipta Plugin Custom Pertama Anda
- Menjadi Pembangun Plugin WordPress: Panduan Lengkap Dari Awal Hingga Akhir
- Panduan Lengkap Pembangunan Plugin WordPress: Dari Permulaan Hingga Kemahiran Tinggi Untuk Membina Perluasan Profesional
- Pembangunan Plugin WordPress: Dari Permulaan Hingga Kemahiran Lanjutan: Membina Plugin Custom Pertama Anda
- Dari Kosong Ke Satu: Panduan Lengkap Untuk Membangunkan Plugin WordPress Pertama Anda Secara Berperingkat