Công tác chuẩn bị và thiết lập môi trường
Trước khi bắt đầu viết mã, bạn cần một môi trường phát triển phù hợp. Điều này bao gồm một phiên bản WordPress được cài đặt trên máy tính của bạn và một trình soạn thảo mã nguồn. Các công cụ như XAMPP, MAMP, Local by Flywheel hoặc Laragon được khuyến nghị để thiết lập nhanh chóng môi trường máy chủ cục bộ. Hãy đảm bảo rằng môi trường của bạn đang chạy phiên bản PHP mới nhất (khuyến nghị từ phiên bản 7.4 trở lên) cùng với MySQL/MariaDB.
Tiếp theo, bạn cần tìm hiểu về cấu trúc cơ bản của các plugin WordPress. Tập tin cốt lõi nhất trong một plugin là một tập tin PHP chính; tên và đường dẫn của tập tin này có thể được tự định, nhưng nó phải chứa một dòng chú thích đặc biệt (plugin header) để thông báo với WordPress về tính năng của plugin đó. Bạn có thể tìm thấy thông tin chi tiết về cấu trúc này trong thư mục cài đặt của WordPress. wp-content/plugins Tạo một thư mục mới bên trong thư mục hiện có, ví dụ như… my-first-plugin。
Trong thư mục này, hãy tạo tập tin plugin chính của bạn, ví dụ như đặt tên nó là… my-first-plugin.phpĐầu của tệp tin này phải chứa các ghi chú thông tin về plugin theo tiêu chuẩn.
Tạo tệp plugin đầu tiên của bạn
Bây giờ, hãy cùng bắt tay vào tạo cấu trúc cơ bản cho plugin của chúng ta. Trong thư mục chứa các plugin của bạn, hãy mở tập tin PHP chính và viết thông tin đầu tiên của plugin theo tiêu chuẩn sau đây.
<?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
* Domain Path: /languages
*/ Đoạn chú thích này là yếu tố then chốt giúp WordPress nhận diện các plugin. Trong đó,Plugin Name Đây là một trường bắt buộc; các trường còn lại đều là tùy chọn. Sau khi lưu tệp, bạn có thể tìm thấy plugin mới này trên trang “Plugins” trong giao diện quản trị WordPress và kích hoạt nó. Hiện tại, plugin này chưa có bất kỳ chức năng nào.
Thêm một chức năng đơn giản cho plugin
Một tính năng đơn giản nhất là thêm một menu quản lý tùy chỉnh vào giao diện quản trị của trang web. Chúng ta sẽ sử dụng… add_action Function mounted to admin_menu hook hành động này.
Trong tệp plugin chính, sau khối chú thích, hãy thêm đoạn mã sau:
// 在管理菜单中添加一个顶级菜单
function mfp_add_admin_menu() {
add_menu_page(
'我的第一个插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 权限要求
'my-first-plugin', // 菜单 slug
'mfp_settings_page', // 回调函数,用于输出页面内容
'dashicons-admin-generic', // 图标(可选)
6 // 菜单位置(可选)
);
}
add_action('admin_menu', 'mfp_add_admin_menu');
// 定义设置页面的回调函数
function mfp_settings_page() {
?>
<div class="wrap">
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
<p>Chào mừng bạn đến với trang cài đặt của plugin đầu tiên của tôi!</p>
<form method="post" action="/vi/options.php/" data-trp-original-action="options.php">
<?php
// 后续可以在这里添加设置字段
?>
<p class="submit">
<input type="submit" name="submit" id="submit" class="button button-primary" value="Lưu các thay đổi">
</p>
<input type="hidden" name="trp-form-language" value="vi"/></form>
</div>
<?php
} Đoạn mã này tạo ra một menu cấp cao mới có tên là “My Plugins” (Các tiện ích của tôi). Khi người dùng nhấp vào menu này, họ sẽ được đưa đến một trang cài đặt đơn giản. Trong đoạn mã này, người ta đã sử dụng các công cụ/phương thức phổ biến để xây dựng và quản lý menu, cũng như trang cài đ add_menu_page Có một hàm được sử dụng để đăng ký menu, đồng thời một hàm gọi lại (callback function) cũng được định nghĩa. mfp_settings_page Đây là đoạn mã được sử dụng để hiển thị nội dung trang web.
Đọc thêm Hướng dẫn nhập môn phát triển plugin WordPress: Xây dựng plugin chức năng đầu tiên từ con số 0。
Sử dụng các hook (móc) và filter (bộ lọc) để mở rộng chức năng của ứng dụng.
Điểm mạnh cốt lõi của WordPress nằm ở cấu trúc plugin của nó, được thực hiện chủ yếu thông qua các hook hành động (action hooks) và hook lọc (filter hooks). Hook hành động cho phép bạn thực thi mã tùy chỉnh vào những thời điểm nhất định, trong khi hook lọc cho phép bạn thay đổi dữ liệu.
Sử dụng các hook hành động (action hooks) để thêm chú thích cuối trang (page footnotes).
Giả sử chúng ta muốn thêm một đoạn văn bản tùy chỉnh tự động vào cuối mỗi bài viết trên trang web. Điều này có thể được thực hiện bằng cách gắn (mount) đoạn văn bản đó vào nội dung của các bài viết. the_content Điều này được thực hiện bằng cách sử dụng các hook (khớp nối) của bộ lọc. Lưu ý rằng, mặc dù tên của nó là “bộ lọc”, nhưng… the_content Thường được sử dụng để thay đổi nội dung được hiển thị trong các bài viết.
// 在文章内容末尾添加自定义文本
function mfp_append_text_to_content($content) {
// 确保只在主循环的单篇文章页面添加
if (is_single() && in_the_loop() && is_main_query()) {
$custom_text = '<p><em>Bài viết này được trình bày cho bạn bởi “My First Plugin”.</em></p>';
$content .= $custom_text;
}
return $content;
}
add_filter('the_content', 'mfp_append_text_to_content'); This function mfp_append_text_to_content Nhận nội dung bài viết gốc. $contentSau khi kiểm tra các điều kiện ngữ cảnh (đảm bảo đó là trang bài viết riêng lẻ), hãy thêm đoạn văn bản tùy chỉnh vào cuối nội dung, và sau đó trả về nội dung đã được sửa đổi. add_filter Hãy đăng ký nó vào… the_content Móc.
Tạo các tùy chọn plugin có thể được cấu hình
Một plugin hữu ích thường cần một số tùy chọn có thể được người dùng cấu hình. WordPress cung cấp API cấu hình để xử lý và quản lý các tùy chọn một cách an toàn. Chúng ta sẽ thêm một trường văn bản đơn giản vào trang cấu hình trước đó.
Trước tiên, chúng ta cần đăng ký một thiết lập (setting) và thêm nó vào trang menu hiện có.
// 初始化插件设置
function mfp_settings_init() {
// 注册一个新的设置到 “reading” 组(或自定义组)
register_setting('mfp_plugin_settings', 'mfp_custom_message');
// 在现有页面内添加一个设置区域
add_settings_section(
'mfp_section_id',
'自定义消息设置',
'mfp_section_callback',
'my-first-plugin'
);
// 向该区域添加一个字段
add_settings_field(
'mfp_field_id',
'页脚消息',
'mfp_field_callback',
'my-first-plugin',
'mfp_section_id'
);
}
add_action('admin_init', 'mfp_settings_init');
// 区域描述回调函数
function mfp_section_callback() {
echo '<p>Tại đây, bạn có thể cấu hình thông điệp mà plugin sẽ hiển thị ở cuối bài viết.</p>';
}
// 字段输出回调函数
function mfp_field_callback() {
// 从数据库中获取已保存的选项值
$message = get_option('mfp_custom_message', '本文由“我的第一个插件”为您呈现。');
echo '<input type="text" name="mfp_custom_message" value="' . esc_attr($message) . '" class="regular-text">';
echo '<p class="description">Hãy nhập thông điệp mà bạn muốn hiển thị ở cuối mỗi bài viết.</p>';
} Sau đó, cần phải sửa đổi những thứ đã được định nghĩa trước đó. mfp_settings_page Hàm này được sử dụng để hiển thị các trường đã được thiết lập trên biểu mẫu.
Đọc thêm Từ làm quen đến thành thạo: Hướng dẫn toàn diện và thực hành phát triển plugin WordPress。
// 更新后的设置页面回调函数
function mfp_settings_page() {
?>
<div class="wrap">
<h1><?php echo esc_html(get_admin_page_title()); ?></h1>
<form method="post" action="/vi/options.php/" data-trp-original-action="options.php">
<?php
// 输出设置字段、安全随机数和设置组
settings_fields('mfp_plugin_settings');
do_settings_sections('my-first-plugin');
submit_button();
?>
<input type="hidden" name="trp-form-language" value="vi"/></form>
</div>
<?php
} Cuối cùng, hãy cập nhật hàm được sử dụng để thêm văn bản trước đó sao cho nó có thể sử dụng các tùy chọn có thể cấu hình được.
function mfp_append_text_to_content($content) {
if (is_single() && in_the_loop() && is_main_query()) {
// 从选项中获取自定义消息,如果不存在则使用默认值
$custom_text = get_option('mfp_custom_message', '本文由“我的第一个插件”为您呈现。');
if (!empty($custom_text)) {
$content .= '<p><em>'`. wp_kses_post($custom_text)`.'</em></p>';
}
}
return $content;
} Chuẩn bị Quốc tế hóa và Phát hành Plugin
Để plugin có thể được sử dụng bởi người dùng trên toàn thế giới, việc hóa đa ngôn ngữ (internationalization) là một bước quan trọng. Điều này đòi hỏi phải sử dụng các trường văn bản (text fields) và các hàm dịch (translation functions) để bao bọc tất cả các chuỗi ký tự hiển thị cho người dùng.
Sử dụng hàm dịch để bao bọc văn bản.
Bạn cần dịch tất cả chuỗi ký tự xuất hiện trong plugin (như echo Văn bản trả về từ hàm `or` (hoặc các hàm tương tự) cần được bao bọc bằng một hàm dịch chuyên biệt. Hàm được sử dụng phổ biến nhất là… () Dùng để dịch và trả về chuỗi ký tự, cũng như… esc_html__() Dùng để dịch và mã hóa (escape) các đoạn HTML.
Sửa đổi ví dụ mã nguồn trước đó:
// 在管理菜单中添加一个顶级菜单(国际化版本)
function mfp_add_admin_menu() {
add_menu_page(
__('我的第一个插件设置', 'my-first-plugin'), // 页面标题
__('我的插件', 'my-first-plugin'), // 菜单标题
'manage_options',
'my-first-plugin',
'mfp_settings_page',
'dashicons-admin-generic',
6
);
}
add_action('admin_menu', 'mfp_add_admin_menu');
// 区域描述回调函数(国际化版本)
function mfp_section_callback() {
echo '<p>' . esc_html__('在这里配置插件在文章末尾显示的消息。', 'my-first-plugin') . '</p>';
} Đồng thời, cần phải tải các trường văn bản (text fields) vào ứng dụng. Sau khối chú thích trong tệp chính của plugin, hãy thêm đoạn mã để tải các tệp dịch về.
// 加载插件文本域
function mfp_load_textdomain() {
load_plugin_textdomain('my-first-plugin', false, dirname(plugin_basename(__FILE__)) . '/languages/');
}
add_action('plugins_loaded', 'mfp_load_textdomain'); Chuẩn bị gói tập tin nén của plugin.
Trước khi phát hành hoặc chia sẻ một plugin, bạn cần tạo một gói phát hành (release package) được sắp xếp gọn gàng. Hãy đảm bảo rằng thư mục chứa plugin của bạn bao gồm tất cả các tệp cần thiết, và loại bỏ những tệp không cần thiết. .git Các thư mục, tệp nhật ký, hoặc tệp cấu hình của IDE đều không liên quan đến nội dung cốt lõi của plugin. Thông thường, một gói phát hành plugin tối giản nên bao gồm những thành phần sau:
1. 主插件 PHP 文件。
2. 一个可选的 readme.txt Đây là một tệp tin được tạo theo định dạng chuẩn của WordPress.org, dùng để hiển thị trong thư mục các plugin (plugin directory).
3. 一个包含翻译文件的 /languages Thư mục (nếu có).
4. 其他必需的 JavaScript、CSS 或图片资源文件夹。
Hãy nén toàn bộ thư mục chứa các plugin thành một tệp ZIP. Tệp này có thể được cài đặt thông qua tính năng “Nạp plugin” trên nền tảng WordPress, hoặc được gửi lên thư mục plugin chính thức của WordPress.
Tóm lại
Thông qua hướng dẫn này, chúng ta đã hoàn thành toàn bộ quy trình phát triển plugin cho WordPress: từ việc chuẩn bị môi trường, tạo tệp chính chứa đầu mục plugin tiêu chuẩn, đến việc thêm các tính năng bằng cách sử dụng các hàm hoạt động (actions) và hook của plugin, tiếp theo là tạo trang cấu hình có thể điều chỉnh thông qua API, và cuối cùng là tìm hiểu những kiến thức cơ bản về hóa đa ngôn ngữ (internationalization). Tất cả những điều này đã tạo nên nền tảng vững chắc cho việc xây dựng những plugin phức tạp và hữu ích hơn. Hãy nhớ rằng, một cấu trúc mã nguồn tốt, việc tuân thủ các tiêu chuẩn lập trình của WordPress, cùng với sự hiểu biết sâu rộng về hệ thống hook của nó, là những yếu tố then chốt để trở thành một nhà phát triển plugin xuất sắc.
FAQ 常见问题
Phát triển plugin WordPress cần kiến thức lập trình gì?
Bạn cần nắm vững những kiến thức cơ bản về lập trình PHP, vì phần lớn mã nguồn của WordPress và các plugin của nó được viết bằng PHP. Việc hiểu biết cơ bản về HTML, CSS và JavaScript cũng sẽ rất hữu ích, đặc biệt là khi bạn cần tùy chỉnh giao diện quản trị hoặc tương tác người dùng ở phía trước (frontend). Việc nắm rõ các khái niệm cơ bản của WordPress như bài viết (articles), trang (pages), thể loại (categories) và các hook (hooks) cũng là điều không thể thiếu.
Tên tệp chính của plugin phải là gì?
Không có yêu cầu bắt buộc nào. Tệp chính có thể là bất kỳ tên tệp PHP hợp lệ nào, nhưng thường được khuyến nghị sử dụng tên tương ứng với tên thư mục chứa plugin. Ví dụ, nếu tên thư mục là… my-super-pluginVậy tệp chính có thể được đặt tên là… my-super-plugin.phpĐiều quan trọng nằm ở phần chú thích về tiêu đề plugin ở đầu tệp tin; WordPress sử dụng thông tin trong những chú thích đó để xác định cách thức hoạt động của plugin. Plugin Name: Để nhận diện các tiện ích mở rộng (plugin).
Làm thế nào để gỡ lỗi mã plugin của tôi?
Có nhiều cách để gỡ lỗi (debug) các plugin. Trước hết, hãy đảm bảo rằng bạn đã… wp-config.php Bật chế độ gỡ lỗi (debug mode) của WordPress trong tệp tin này. WP_DEBUG Hằng số được thiết lập trueĐiều này sẽ hiển thị các lỗi PHP, cảnh báo và thông báo trên trang web. Ngoài ra, bạn cũng có thể sử dụng chúng để… error_log() Hàm sẽ ghi thông tin gỡ lỗi vào nhật ký lỗi của máy chủ, hoặc sử dụng các công cụ gỡ lỗi nâng cao như plugin Query Monitor – công cụ này có thể cung cấp thông tin chi tiết về các truy vấn cơ sở dữ liệu, các hàm được gọi (hooks), lỗi trong PHP, v.v.
Làm thế nào để tôi phát hành plugin mà tôi đã phát triển lên danh mục chính thức của WordPress?
Để đăng ký plugin của bạn vào danh mục plugin chính thức của WordPress.org, bạn cần đăng ký một tài khoản trên WordPress.org trước, sau đó nộp plugin của mình để được xem xét. Mã nguồn của plugin phải tuân theo giấy phép GNU GPL, và phải bao gồm tệp thiết lập (configuration file) có định dạng đúng. readme.txt Tệp tin: Nhóm đánh giá sẽ kiểm tra chất lượng mã nguồn, mức độ bảo mật, và xem liệu nó có tuân thủ các hướng dẫn về cấu trúc thư mục hay không. Sau khi qua quá trình đánh giá, bạn sẽ nhận được một kho lưu trữ SVN (Subversion) để quản lý và cập nhật các phiên bản của plugin của mình.
Bước tiếp theo, chúng ta nên làm gì tiếp theo?
Đọc thêm và kiến thức thực tế
Những nội dung sau đây liên quan đến chủ đề của bài viết này, thích hợp để tiếp tục đọc sâu hơn. Ưu tiên bắt đầu với bài viết gần nhất với vấn đề hiện tại của bạn, rồi dần dần mở rộng sang các chủ đề xung quanh, hiệu quả thường sẽ tốt hơn.
- Làm thế nào để chọn và tùy chỉnh một chủ đề WordPress phù hợp với nhu cầu của bạn?
- Hướng dẫn phát triển plugin WordPress: Từ con số không đến plugin tùy chỉnh đầu tiên của bạn
- Trở thành nhà phát triển plugin WordPress: Hướng dẫn toàn diện từ đầu đến cuối
- Từ con số không đến con số một: Hướng dẫn đầy đủ và kỹ năng thực hành để xây dựng trang web chuyên nghiệp bằng WordPress
- Hướng dẫn toàn diện phát triển plugin WordPress: Từ cơ bản đến chuyên sâu để tạo các tiện ích mở rộng chuyên nghiệp