Mengapa memulakan pembelajaran pengembangan WordPress dengan menggunakan plugin?
Salah satu falsafah reka bentuk asas WordPress adalah kebolehannya yang sangat tinggi untuk diperluas (scalability), dan plugin merupakan alat utama untuk mencapai ciri ini. Berbeza dengan mengubah suai tema secara langsung…functions.phpBerbanding dengan mengubah suai fail secara langsung, membuat sebuah plugin yang berdiri sendiri mempunyai kelebihan yang ketara. Plugin memisahkan logik fungsi daripada reka bentuk tema, yang membolehkan fungsi-fungsi asas website dikekalkan walaupun anda menukar tema tersebut. Ini menjadikan kod lebih teratur dan mudah diselenggara, serta memudahkan penggunaan semula kod, kawalan versi, dan perkongsian dengan pembangun lain.
Dari perspektif teknikal, sebuah plugin pada dasarnya merupakan satu atau lebih fail PHP yang mematuhi standard WordPress yang ditetapkan, dan disimpan di dalam direktori yang sesuai dalam sistem WordPress./wp-content/plugins/Di dalam direktori tersebut, apabila WordPress diinisialisasikan, ia akan memeriksa direktori tersebut dan memuatkan kod semua plugin yang aktif. Ini bermakna melalui plugin, anda hampir boleh mengubah atau menambah baik mana-mana aspek WordPress dengan bebas, daripada menambahkan kod pendek yang mudah hingga mencipta panel kawalan yang kompleks.
Membina struktur asas untuk plugin pertama anda
Langkah pertama dalam membuat sebuah plugin WordPress adalah untuk membina struktur fail asasnya. Walaupun sebuah plugin boleh hanya mempunyai satu fail, struktur yang baik akan membantu dalam penyelenggaraan jangka panjang.
Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Permulaan Pembangunan Plugin WordPress: Bina Extension Fungsi Khusus Pertama Anda Dari Kosong。
Mencipta fail plugin utama
Setiap plugin mesti mempunyai satu fail utama yang mengandungi maklumat meta tentang plugin tersebut. Kita akan bermula dengan mengatur fail utama ini dalam persekitaran pembangunan tempatan (local development environment)./wp-content/plugins/Cipta folder baru di bawah direktori, sepertimy-first-pluginKemudian, cipta fail PHP utama di dalam folder tersebut; biasanya namanya sama dengan nama folder itu sendiri.my-first-plugin.php。
Di bahagian atas fail utama ini, kita perlu menambahkan blok komen maklumat plugin standard. Blok komen ini sangat penting kerana ia membenarkan WordPress mengenal pasti plugin tersebut dan memaparkannya di antara muka pentadbiran laman web.
<?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
*/ Mendefinisikan kelas teras untuk plugin
Untuk mengekalkan kerahsiaan kod (encapsulation) dan mengelakkan konflik penamaan, amalan terbaik adalah menggunakan pengaturcaraan berorientasikan objek (object-oriented programming), di mana semua fungsi plugin dikumpulkan dalam satu kelas. Kita mendefinisikan kelas ini dalam fail utama.
if ( ! class_exists( 'My_First_Plugin' ) ) {
class My_First_Plugin {
/**
* 构造方法,用于初始化插件
*/
public function __construct() {
// 初始化钩子
$this->init_hooks();
}
/**
* 初始化WordPress动作和过滤器钩子
*/
private function init_hooks() {
// 钩子将在这里添加
}
}
// 实例化插件类
new My_First_Plugin();
} if ( ! class_exists( 'My_First_Plugin' ) )Ini adalah pemeriksaan keselamatan untuk mencegah kelas daripada didefinisikan berulang kali.__construct()Ini adalah fungsi pembina (constructor) bagi kelas tersebut, yang dipanggil secara automatik apabila kelas itu diinstansiasi. Di dalamnya, kami memanggil sebuah kaedah peribadi (private method).init_hooks()Untuk mengurus pendaftaran semua “hook” secara terpusat.
Menggunakan sistem hook untuk menambahkan fungsi
Sistem Hook dalam WordPress merupakan teras kepada arkitektur berbasis acara (event-driven architecture)nya, dan ia terbahagi kepada dua jenis: Action dan Filter. Action membenarkan anda untuk menjalankan kod pada masa-masa tertentu, manakala Filter membenarkan anda untuk mengubah data.
Diperoleh daripada WEB\nDisyorkan untuk membaca. Pembangunan plugin WordPress dari pemula hingga mahir: Panduan langkah demi langkah untuk membantu anda mencipta fungsi khusus.。
Tambahkan hak cipta khusus untuk kandungan artikel.
Satu keperluan yang sering berlaku adalah untuk menambahkan maklumat hak cipta secara automatik di akhir setiap artikel. Ini boleh dilakukan dengan…the_contentIa dilaksanakan menggunakan penapis (filters). Kita…init_hooks()Tambahkan penapis ini ke dalam kaedah tersebut.
Pertama sekali, kemas kini.init_hooks()Metode:
private function init_hooks() {
// 使用过滤器在文章内容后追加版权信息
add_filter( 'the_content', array( $this, 'append_copyright_notice' ) );
} Di sini,add_filter()Fungsi tersebut akan digunakan dalam kelas kami.append_copyright_noticeMethod mounted tothe_contentPada penapis tersebut. Sekarang, kita perlu mendefinisikan kaedah panggilan balik (callback method) ini.
/**
* 在文章内容后追加版权信息的回调函数
*
* @param string $content 原始文章内容。
* @return string 追加了版权信息后的内容。
*/
public function append_copyright_notice( $content ) {
// 仅在主查询的单篇文章页面显示
if ( is_single() && in_the_loop() && is_main_query() ) {
$copyright_text = sprintf(
'<p><small>© Hak Cipta: Artikel ini pertama kali diterbitkan di %s. Sila berikan sumber apabila mengambil dan memperbaikinya.</small></p>',
get_bloginfo( 'name' )
);
$content .= $copyright_text;
}
return $content;
} Metode ini menerima data asli (original data).$contentMelalui penilaian keadaan (condition judgment)is_single()、in_the_loop()和is_main_query()Kita memastikan bahawa maklumat hak cipta hanya muncul dalam kandungan utama halaman artikel individu pada bahagian hadapan (front end), dan tidak mempengaruhi halaman tersebut, ringkasan artikel, atau sistem pengurusan di belakang tabir (management backend). Kemudian, kita membina teks hak cipta tersebut menggunakan operator penggabungan rentetan (string concatenation)..=Tambahkankannya ke dalam kandungan asal, kemudian kembalikan kandungan yang telah diubah suai.
Create a management menu page.
Menambahkan halaman tetapan yang mudah untuk plugin adalah ciri yang sering digunakan. Ini memerlukan penggunaan “action hooks” (pautan tindakan). Kita akan membuat halaman menu pengurusan utama.
在init_hooks()Teruskan menambahkan satu tindakan:
Diperoleh daripada WEB\nDisyorkan untuk membaca. Panduan Permulaan untuk Membangunkan Plugin WordPress: Mencipta Modul Fungsi Pertama Anda Dari Awal Hingga Selesai.。
private function init_hooks() {
add_filter( 'the_content', array( $this, 'append_copyright_notice' ) );
// 添加管理菜单
add_action( 'admin_menu', array( $this, 'add_admin_menu_page' ) );
} Ketika WordPress membina menu pengurusan, ia akan memulakan proses tersebut.admin_menuTindakan. Kita akan mendefinisikannya seterusnya.add_admin_menu_page()Metode.
/**
* 向WordPress管理后台添加一个自定义菜单页面
*/
public function add_admin_menu_page() {
add_menu_page(
'我的第一个插件', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限要求
'my-first-plugin-page', // 菜单别名
array( $this, 'render_admin_page' ), // 回调函数,用于输出页面内容
'dashicons-admin-plugins', // 图标
80 // 菜单位置
);
} add_menu_page()Fungsi tersebut merupakan sebahagian daripada API teras WordPress, yang digunakan untuk mendaftarkan menu utama (top-level menu) dalam sistem.manage_optionsIni merupakan penanda hak akses, yang bermakna hanya pentadbir sahaja yang boleh melihat menu ini. Kami telah menentukan perkara tersebut.render_admin_pageCara untuk merender kandungan halaman.
/**
* 渲染管理页面内容的回调函数
*/
public function render_admin_page() {
?>
<div class="wrap">
<h1>Halaman pengurusan plugin pertama saya</h1>
<p>Tahniah! Anda telah berjaya membuat sebuah plugin WordPress yang dilengkapi dengan halaman pengurusan.</p>
<p>Ini adalah halaman contoh yang mudah; anda boleh menambahkan borang, mengatur pilihan, dan lain-lain di sini.</p>
<p>Nama laman web semasa adalah:<strong><?php echo esc_html( get_bloginfo( 'name' ) ); ?></strong></p>
</div>
<?php
} Melaksanakan amalan terbaik untuk internationalisasi dan keselamatan
Sebuah plugin yang standard harus mengambil kira aspek internasionalisasi dan keselamatan, untuk memastikan ia dapat digunakan dengan selamat oleh pengguna di seluruh dunia.
Aktifkan sokongan pelbagai bahasa untuk pemalam.
Internationalisasi (i18n) membolehkan teks dalam plugin diterjemahkan. Kami telah menyatakan perkara ini dalam nota di bahagian atas plugin.Text Domain: my-first-pluginSekarang perlu digunakan.__()或_e()Fungsi ini digunakan untuk mengelilingi semua rentetan yang dihasilkan.
Pertama sekali,__construct()或init_hooks()Tambahkan satu tindakan untuk memuatkan fail terjemahan:
add_action( 'plugins_loaded', array( $this, 'load_textdomain' ) ); Mendefinisikan kaedah untuk memuatkan terjemahan:
public function load_textdomain() {
load_plugin_textdomain(
'my-first-plugin',
false,
dirname( plugin_basename( __FILE__ ) ) . '/languages/'
);
} Kemudian, ubah bahagian teks yang telah dihasilkan sebelum ini. Sebagai contoh, kemas kini.append_copyright_noticeTeks dalam kaedah:
$copyright_text = sprintf('<p><small>© %s: %s, %s.</small></p>',
__( '版权声明', 'my-first-plugin' ),
sprintf( __( '本文首发于%s', 'my-first-plugin' ), get_bloginfo( 'name' ) ),
__( '转载请注明出处', 'my-first-plugin' )
); Begitu juga, kemas kini rentetan teks pada halaman pengurusan kemas kini:
<h1><?php esc_html_e( '我的第一个插件管理页面', 'my-first-plugin' ); ?></h1>
<p><?php esc_html_e( '恭喜!你已经成功创建了一个带有管理页面的WordPress插件。', 'my-first-plugin' ); ?></p> esc_html_e()Fungsi tersebut telah melakukan proses pengelakkan karakter berbahaya (HTML escaping) semasa menghasilkan teks terjemahan, yang meningkatkan keselamatan sistem.
“Escape Output and Verify Input”
Dalam pembangunan plugin, semua data yang dihasilkan dan dihantar ke bahagian hadapan (frontend) atau pelayar mesti di-escape. Selain itu, semua input yang diterima daripada pengguna atau sumber luar mesti disahkan dan dibersihkan (diproses untuk menghilangkan elemen yang tidak diinginkan).
Ketika mengeluarkan nama laman web, kami sudah menggunakannya.esc_html()Ini adalah langkah-langkah kritikal untuk mencegah serangan skrip merentas tapak (XSS). Jika nama fungsi berakhir dengan “_e” (yang bermaksud “echo”), ia biasanya akan mengeluarkan kandungan yang telah di-escape secara langsung. Sebaliknya, fungsi yang bermula dengan “__” akan mengembalikan rentetan yang telah diterjemahkan, dan anda perlu melakukan proses peng-evasion (escaping) secara manual sebelum mengeluarkannya.
Jika halaman pengurusan kita pada masa depan perlu mengendalikan penghantaran borang, kita mesti menggunakan…wp_verify_nonce()Untuk mengesahkan permintaan tersebut, gunakan…sanitize_text_field()、intval()Gunakan fungsi-fungsi tertentu untuk membersihkan data yang dimasukkan oleh pengguna sebelum menyimpannya ke dalam pangkalan data atau melakukan operasi lain. Ini merupakan langkah yang penting untuk melindungi keselamatan laman web.
RINGKASAN
Melalui panduan ini, kita bermula dengan mencipta struktur fail plugin yang asas, dan secara beransur-ansur melaksanakan fungsi utama plugin tersebut. Kita telah belajar cara mengatur kod menggunakan pendekatan berorientasikan objek, serta cara menggunakan mekanisme “actions” dan “filters” yang kuat dalam WordPress untuk mengintervensi proses pengendalian sistem tersebut, bagi menambahkan fungsi khusus pada kandungan artikel. Selain itu, kita juga telah membuat halaman pentadbiran untuk plugin tersebut. Pada masa yang sama, kita juga telah membincangkan aspek penting dalam pembangunan plugin profesional, iaitu pengaturcaraan untuk penggunaan berbilang bahasa (internationalization atau i18n) serta pengeluaran/penerimaan data yang selamat (secure output/input).
Ini hanyalah satu titik permulaan. Berdasarkan rangka ini, anda boleh terus meneroka lebih banyak kemungkinan: menambahkan pilihan tetapan, membuat jenis artikel dan kategori yang disesuaikan, menulis widget, memperkenalkan interaksi AJAX, menguruskan kod pendek (shortcode), dan sebagainya. Ingatlah bahawa membaca manual plugin rasmi WordPress dan kod terasnya adalah cara terbaik untuk belajar dengan mendalam. Kini, anda telah mempelajari kemahiran asas untuk membina plugin WordPress dari awal, dan anda boleh mula mengubah idea-idea anda menjadi kenyataan.
FAQ - Soalan Lazim
Adakah plugin mesti dibangunkan menggunakan kelas?
Tidak semestinya. Plugin WordPress boleh ditulis menggunakan fungsi prosedural sahaja. Namun, penggunaan kelas (pemrograman berorientasikan objek) adalah amalan yang lebih disyorkan kerana ia membolehkan kod diatur dengan lebih baik, membolehkan pemboleh ubah dan kaedah disimpan dalam ruang nama yang berasingan, mengelakkan konflik nama fungsi dengan plugin atau tema lain, serta meningkatkan kebolehjagaan dan kebolehgunaan semula kod.
Bagaimana untuk membaiki (debug) plugin saya?
Metode penyelidikan (debugging) yang sering digunakan dalam pembangunan WordPress adalah dengan mengaktifkan WP_DEBUG. Ini dilakukan dalam direktori akar (root directory) laman web anda.wp-config.phpDalam fail tersebut, cari dan ubah baris berikut:define( 'WP_DEBUG', true );Anda juga boleh menetapkan beberapa perkara pada masa yang sama.define( 'WP_DEBUG_LOG', true );Dengan cara ini, mesej ralat akan direkod./wp-content/debug.logFail tersebut tidak akan dipaparkan di halaman web. Selain itu, menggunakan panel konsol (Console) dan tab rangkaian (Network) dalam alat pembangun pelayar (browser developer tools), serta log ralat PHP (PHP error logs), juga merupakan cara yang berkesan untuk mengenal pasti masalah.
Bolehkah saya menggunakan jQuery secara langsung dalam plugin saya?
Ya, boleh. Pusat pengurusan WordPress (WordPress Core) sudah mempunyai perpustakaan jQuery yang terbina dalamnya. Untuk memasukkan fail JavaScript khusus anda atau kebergantungan lain dengan betul dan selamat, anda harus menggunakan…wp_enqueue_script()Fungsi tersebut, dan ia dideklarasikan dalam senarai kebergantungan (dependency array).array( 'jquery' )Dengan cara ini, WordPress akan memastikan jQuery dimuat turun sebelum skrip anda. Jangan sekali-kali mengkodekan secara langsung pautan CDN jQuery jauh ke dalam plugin, kerana ini boleh menyebabkan konflik atau masalah keselamatan.
Apa pemeriksaan yang perlu dilakukan sebelum mengeluarkan sebuah plugin?
Sebelum menerbitkan plugin, disarankan untuk melakukan pemeriksaan berikut: Pastikan kod memenuhi standard pengkodan WordPress; Lengkapkan persediaan pengantarabangsaan, semua rentetan yang dapat dilihat oleh pengguna telah dibungkus dengan fungsi terjemahan; Uji keserasian pada pelbagai versi WordPress dan PHP; Periksa semua output telah diselaraskan dengan betul, dan semua input telah disahkan dan dibersihkan dengan betul; Sedediakan kaedah nyahpasang yang jelas, yang boleh memadam semua pilihan dan jadual pangkalan data yang dicipta oleh plugin (jika perlu); Tulis dokumentasi terperinci.readme.txtFail-fail tersebut. Langkah-langkah ini dapat meningkatkan kualiti dan kebolehpercayaan plugin tersebut.
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