Các công việc chuẩn bị trước khi phát triển
Trước khi bắt đầu viết mã, chúng ta cần đảm bảo rằng môi trường phát triển đã được thiết lập đúng cách và hiểu rõ về cấu trúc cơ bản của các plugin WordPress. Một môi trường phát triển cục bộ phù hợp là nền tảng cho công việc hiệu quả.
Xây dựng môi trường phát triển cục bộ
Trước hết, bạn cần một môi trường máy chủ cục bộ để chạy WordPress. Các công cụ tích hợp như XAMPP, MAMP hoặc Local by Flywheel được khuyến nghị sử dụng. Sau khi cài đặt xong WordPress, bạn có thể… wp-content/plugins Hãy bắt đầu phát triển plugin của bạn từ thư mục này. Thư mục này chứa tất cả các plugin, dù là những plugin do bạn tự phát triển hay những plugin được cài đặt từ thư mục chính thức.
Hiểu rõ về các tệp tin cốt lõi của plugin
Mỗi plugin WordPress đều cần ít nhất một tệp chính (main file), đây chính là “tài liệu nhận dạng” và “bộ khởi động” của plugin đó. Tệp này thường được đặt tên theo chức năng của plugin. Ví dụ: my-first-plugin.phpKhối chú thích ở đầu tệp chính này rất quan trọng; nó mô tả những thông tin cơ bản về plugin cho hệ thống WordPress.
Tạo tệp plugin đầu tiên của bạn
Bây giờ, hãy bắt đầu từ những phần cơ bản nhất để tạo ra một plugin đơn giản nhưng có chức năng thực sự.
Viết chú thích ở phần đầu của plugin.
在 wp-content/plugins Trong thư mục đó, hãy tạo một tệp có tên là… my-first-plugin Tạo một thư mục mới. Sau đó, hãy tạo tệp chính (main file) bên trong thư mục đó. my-first-plugin.phpỞ phần đầu tiên của tệp tin này, bạn cần thêm những dòng chú thích chứa thông tin về plugin, phải tuân thủ các tiêu chuẩn của WordPress.
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://yourwebsite.com/my-first-plugin
* Description: 这是一个用于学习的简单插件,用于在文章末尾添加自定义文本。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://yourwebsite.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ Đoạn mã này thông báo cho WordPress rằng đây là một plugin, đồng thời xác định các thông tin như tên, mô tả, phiên bản của plugin đó trong giao diện quản trị nền. Sau khi lưu tệp, bạn hãy đăng nhập vào WordPress Admin, truy cập trang “Plugins” (Các plugin), và plugin của bạn sẽ xuất hiện trong danh sách. Bây giờ bạn có thể kích hoạt nó; tuy nhiên, plugin này vẫn chưa có bất kỳ chức năng nào cả.
Thực hiện một chức năng cơ bản: Lọc nội dung bài viết.
Sau khi kích hoạt plugin, chúng ta cần cho nó thực hiện một số tác vụ cụ thể. Một tính năng phổ biến dành cho người mới bắt đầu là chỉnh sửa nội dung bài viết. Chúng ta sẽ sử dụng tính năng này. the_content Hook này của bộ lọc sẽ tự động thêm một đoạn văn bản tùy chỉnh vào cuối mỗi bài viết.
Trong tệp chính (main file) my-first-plugin.php Dưới phần chú thích ở đầu (header comments), chúng ta sẽ thêm đoạn mã chức năng (function code):
Đọc thêm Cách tạo một chủ đề WordPress chuyên nghiệp: Hướng dẫn đầy đủ từ con số 0 đến khi ra mắt。
// 在文章内容末尾添加自定义文本
function myfp_add_custom_text_to_content( $content ) {
// 确保只在主循环的单篇文章页面添加
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_text = '<p><strong>Cảm ơn bạn đã đọc! Bài viết này được hỗ trợ bởi “My First Plugin”.</strong></p>';
$content .= $custom_text;
}
return $content;
}
// 将我们的函数挂载到 ‘the_content’ 过滤器上
add_filter( 'the_content', 'myfp_add_custom_text_to_content' ); Đoạn mã này định nghĩa một biến có tên là… myfp_add_custom_text_to_content Đây là một hàm. Nó nhận vào nội dung của bài viết. $content Làm một tham số, thông qua các điều kiện để đảm bảo rằng văn bản chỉ được thêm vào trang hiển thị chi tiết của một bài viết trên trang web, tránh hiệu lực trên các trang khác (chẳng hạn như trang danh sách). Sau đó, nó sẽ thêm một đoạn HTML tùy chỉnh vào cuối nội dung gốc và trả về nội dung đã được sửa đổi. Cuối cùng, sử dụng… add_filter() Hàm này sẽ “gắn” (mount) hàm tùy chỉnh này vào lõi của WordPress. the_content Nó được đặt trên bộ lọc (filter). Nhờ vậy, mỗi khi WordPress chuẩn bị hiển thị nội dung bài viết, hàm của chúng ta sẽ được thực thi trước.
Sau khi lưu file, hãy truy cập trang web và xem bất kỳ bài viết nào; bạn sẽ thấy đoạn văn cảm ơn mà chúng ta đã thêm đã xuất hiện ở phía cuối trang.
Thêm tùy chọn quản lý cho plugin.
Một plugin có chức năng hoàn chỉnh thường cần một số tùy chọn cấu hình, cho phép người dùng thực hiện các thiết lập từ phía backend. Chúng tôi sẽ thêm một trang cấu hình cho tính năng “Văn bản tùy chỉnh” vừa rồi.
Tạo menu quản lý plugin
Trước hết, chúng ta cần thêm một mục menu mới vào thanh bên cạnh quản trị trong giao diện WordPress. Điều này yêu cầu sử dụng các công cụ tích hợp sẵn trong hệ thống WordPress. add_action() và hàm admin_menu Móc.
// 添加管理菜单
function myfp_add_admin_menu() {
add_options_page(
'我的第一个插件设置', // 页面标题
'我的插件设置', // 菜单标题
'manage_options', // 权限要求
'my-first-plugin', // 菜单 slug
'myfp_options_page_html' // 显示设置页面的回调函数
);
}
add_action( ‘admin_menu’, ‘myfp_add_admin_menu’ ); add_options_page() Hàm sẽ tạo một mục con trong menu chính “Cài đặt”. Nó yêu cầu một số tham số: tiêu đề trang, tiêu đề menu, quyền truy cập của người dùng, mã định danh duy nhất cho menu (slug), và tên hàm gọi lại được sử dụng để hiển thị nội dung HTML của trang cài đặt. myfp_options_page_html。
Xây dựng trang cấu hình và lưu dữ liệu
Tiếp theo, chúng ta cần định nghĩa các hàm gọi lại (callback functions) để hiển thị trang cấu hình và xử lý dữ liệu mà người dùng đã gửi đi.
Đọc thêm Hướng dẫn phát triển plugin WordPress: Xây dựng plugin đầu tiên từ con số 0。
// 渲染设置页面的HTML
function myfp_options_page_html() {
// 检查用户权限
if ( !current_user_can( 'manage_options' ) ) {
return;
}
?>
<div class="“wrap”">
<h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
<form action="/vi/“options.php”/" method="“post”" data-trp-original-action="“options.php”">
<?php
// 输出必要的安全字段
settings_fields( ‘myfp_settings’ );
// 输出设置区域
do_settings_sections( ‘my-first-plugin’ );
// 输出提交按钮
submit_button( ‘保存设置’ );
?>
<input type="hidden" name="trp-form-language" value="vi"/></form>
</div>
‘myfp_field_custom_text’ ]
);
}
add_action( ‘admin_init’, ‘myfp_settings_init’ );
// 渲染文本框的HTML
function myfp_field_custom_text_html() {
// 从数据库获取已保存的值
$options = get_option( ‘myfp_options’ );
$value = $options[‘myfp_field_custom_text’] ?? ‘’; // 使用空合并运算符,如果不存在则赋空值
?>
<input type="“text”"
id="“myfp_field_custom_text”"
name="“myfp_options[myfp_field_custom_text]”"
value="“NO NUMERIC NOISE KEY" 1000”
class="“regular-text”">
<?php
} Đoạn mã này thông qua register_setting、add_settings_section 和 add_settings_field Một loạt các hàm được sử dụng để tạo một trang cài đặt theo chuẩn API của WordPress, bao gồm một ô nhập văn bản. Nội dung mà người dùng nhập vào sẽ được lưu trữ một cách an toàn. wp_options data table myfp_options Đã được ghi chép lại.
Cuối cùng, chúng ta cần sửa đổi hàm dùng để lọc nội dung bài viết trước đó, để nó sử dụng văn bản lấy từ cơ sở dữ liệu thay vì văn bản được khóa (hardcoded).
function myfp_add_custom_text_to_content( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$options = get_option( ‘myfp_options’ );
$custom_text = $options[‘myfp_field_custom_text’] ?? ‘’;
if ( ! empty( $custom_text ) ) {
$content .= ‘<p><strong>’ . esc_html( $custom_text ) . ‘</strong></p>’;
}
}
return $content;
} Hiện nay, người dùng có thể nhập bất kỳ văn bản nào vào trang “Cài đặt” -> “Cài đặt plugin của tôi”. Sau khi lưu, văn bản đó sẽ được hiển thị ở cuối mỗi bài viết trên trang web.
Những thực hành nâng cao trong việc phát triển plugin và chuẩn bị cho việc phát hành chúng
Sau khi các chức năng cơ bản được hoàn thành, chúng ta cần xem xét đến độ ổn định (robustness) và khả năng bảo trì (maintainability) của plugin, cũng như cách để chia sẻ nó cho người khác sử dụng.
Thêm hỗ trợ bảo mật và quốc tế hóa
An ninh là yếu tố quan trọng nhất trong quá trình phát triển các tiện ích mở rộng (plugin). Trong ví dụ trên, chúng ta đã sử dụng các biện pháp bảo mật cần thiết để đảm bảo an toàn cho hệ thống. esc_html() 和 esc_attr() Hãy sử dụng các hàm được cung cấp bởi WordPress để tiến hành “đánh dấu ký tự đặc biệt” (escape) đối với dữ liệu đầu ra, nhằm ngăn chặn các cuộc tấn công XSS. Khi xử lý dữ liệu do người dùng nhập vào, thực hiện truy vấn cơ sở dữ liệu hoặc tải các tệp từ bên ngoài, bạn luôn phải áp dụng các hàm bảo mật mà WordPress cung cấp. wpdb->prepare()、sanitize_text_field() 和 check_admin_referer() v.v.
Ngoài ra, để plugin có thể được sử dụng bởi người dùng trên toàn thế giới, việc hỗ trợ đa ngôn ngữ (internationalization – i18n) là rất cần thiết. Chúng ta cần bao bọc tất cả các chuỗi văn bản dành cho người dùng trong plugin bằng các hàm dịch của WordPress. Điều này đòi hỏi chúng ta phải sửa đổi đoạn mã đã viết trước đó.
1. Đã được chỉ định trong phần ghi chú ở đầu plugin. Text Domain: my-first-plugin。
2. Tải dữ liệu từ trường văn bản (text field). Thông thường, bạn sẽ thêm đoạn mã này ở cuối tệp chính (main file):add_action( ‘plugins_loaded’, function() { load_plugin_textdomain( ‘my-first-plugin’, false, dirname( plugin_basename( FILE ) ) . ‘/languages/’ ); } );。
3. Chuỗi ký tự được sử dụng để đóng gói các thông tin. Ví dụ, để thay đổi tiêu đề của khu vực cài đặt… ( ‘自定义文本设置’, ‘my-first-plugin’ )Hãy thay đổi tiêu đề menu thành… ( ‘我的插件设置’, ‘my-first-plugin’ )Nhờ vào cách này, những người dịch thuật có thể thực hiện công việc của mình một cách hiệu quả hơn. .po/.mo Tệp tin cung cấp các phiên bản ngôn ngữ khác cho những chuỗi ký tự này.
Chuẩn bị để phát hành plugin vào danh mục chính thức.
Nếu bạn muốn gửi plugin của mình đến danh mục plugin chính thức của WordPress.org, bạn cần tuân theo một loạt quy định nhất định:
1. Quy tắc lập trình: Tuân thủ các tiêu chuẩn mã hóa của WordPress.
2. Cấu trúc tệp tin: Ngoài tệp tin chính, thường còn cần các tệp tin khác nữa. README.txt(Mô tả plugin, được sử dụng trên trang danh mục)uninstall.php(Xử lý các công việc dọn dẹp khi gỡ cài đặt plugin), v.v.
3. SVN 仓库:官方目录使用 Subversion (SVN) 进行版本管理,你需要将你的插件代码提交到指定的 SVN 仓库。
4. Dữ liệu metatag (Metadata):README.txt Cần phải biên soạn theo một định dạng cụ thể, bao gồm tên plugin, mô tả, cách cài đặt, câu hỏi thường gặp, nhật ký cập nhật, v.v.
Tóm lại
Thông qua hướng dẫn này, bạn đã hoàn thành một vòng đời phát triển plugin WordPress hoàn chỉnh: từ việc tạo ra tệp đầu tiên, viết chú thích trong phần đầu của tệp (header comments), sử dụng các hook hành động (action hooks) và hook lọc (filter hooks) để triển khai các chức năng cốt lõi, đến việc thêm trang cấu hình cho plugin, và cuối cùng là tìm hiểu về các kiến thức nâng cao như bảo mật, hóa đa ngôn ngữ (internationalization) và chuẩn bị cho việc phát hành plugin. Mặc dù plugin này chỉ đơn giản (dùng để thêm văn bản tùy chỉnh ở cuối bài viết), nhưng nó đã bao gồm tất cả các khái niệm và quy trình cơ bản nhất trong việc phát triển plugin. Sau khi nắm vững những kiến thức cơ bản này, bạn có thể tiếp tục khám phá hệ thống hook phong phú của WordPress, các mã ngắn (shortcodes), các loại bài viết tùy chỉnh (custom post types – CPT), và REST API để xây dựng những plugin có chức năng mạnh mẽ và phức tạp hơn. Hãy nhớ rằng thực hành là cách học tốt nhất; hãy thử sửa đổi mã nguồn và thêm các chức năng mới để củng cố kiến thức của mình.
FAQ 常见问题
Tên tệp chính của plugin phải là gì?
Tên tệp chính của plugin không bị yêu cầu phải theo một quy tắc cụ thể nào, nhưng nó phải bắt đầu bằng chữ “plugin”. .php Kết thúc. Thông thường, để đảm bảo tính rõ ràng và độ duy nhất, chúng ta sử dụng tên giống với tên thư mục chứa plugin hoặc tên có thể mô tả chức năng của plugin đó. Ví dụ: my-awesome-plugin.phpWordPress nhận diện các plugin bằng cách đọc một khối chú thích cụ thể ở phần đầu của tệp đó.
Tại sao plugin của tôi không hiển thị trong menu nền?
Điều này thường xảy ra do một số lý do. Trước hết, hãy kiểm tra xem plugin có được kích hoạt thành công hay không. Tiếp theo, hãy kiểm tra lại… add_menu_page() Hoặc các tham số liên quan đến quyền hạn người dùng (capability) trong các hàm tương tự; hãy đảm bảo rằng người dùng đang đăng nhập có đủ quyền cần thiết (ví dụ: manage_optionsCuối cùng, hãy kiểm tra xem hàm của bạn có thực sự hoạt động đúng như mong đợi hay không. add_action(‘admin_menu’, …) Mounting the plugin. Any PHP syntax error may cause the entire plugin to fail during initialization.
Làm thế nào để gỡ lỗi PHP trong các plugin?
Trong giai đoạn phát triển, bạn nên bật chế độ gỡ lỗi (debug mode) của WordPress. Hãy mở tập tin cấu hình `wp-config.php` tại thư mục gốc của trang web và tìm đoạn mã sau: wp-config.php Đối với tệp tin này, hãy đảm bảo rằng các thiết lập sau đã được kích hoạt:
define( ‘WP_DEBUG’, true );
define( ‘WP_DEBUG_LOG’, true ); // 将错误记录到 /wp-content/debug.log
define( ‘WP_DEBUG_DISPLAY’, false ); // 不建议在页面上显示,以免破坏布局
Như vậy, thông báo lỗi sẽ được ghi vào tệp nhật ký, giúp việc tìm kiếm nguyên nhân sự cố trở nên dễ dàng hơn. Trước khi phát hành plugin, hãy nhớ tắt chế độ gỡ lỗi (debug mode).
Dữ liệu tùy chọn của plugin được lưu trữ ở đâu?
Sử dụng plugin add_option() 或 update_option() Dữ liệu được lưu trữ bởi các hàm được đặt trước sẽ được lưu trong cơ sở dữ liệu của WordPress mặc định. wp_options Trong bảng (tiền tố của bảng có thể khác nhau). Hãy sử dụng nó. get_option() Các hàm có thể đọc dữ liệu này. Đối với những cấu trúc dữ liệu phức tạp hơn, đôi khi người ta cũng sẽ tạo ra các bảng cơ sở dữ liệu tùy chỉnh, nhưng điều này đòi hỏi phải xử lý một cách thận trọng hơn.
Làm thế nào để plugin của tôi hỗ trợ nhiều ngôn ngữ (hóa đa ngôn ngữ)?
Bạn cần sử dụng hàm dịch của WordPress để bao bọc tất cả các chuỗi dữ liệu nhắm đến người dùng. Hàm được sử dụng phổ biến nhất là… __(‘字符串’, ‘text-domain’) 和 _e(‘字符串’, ‘text-domain’)Sau đó, sử dụng các công cụ như Poedit để trích xuất những chuỗi này và tạo ra kết quả cần thiết. .pot Tệp mẫu, và tạo phiên bản dịch sang ngôn ngữ tương ứng (ví dụ: zh_CN.po 和 .moCuối cùng, hãy đặt tệp ngôn ngữ vào thư mục của plugin. /languages/ Nằm trong thư mục đó, và được sử dụng khi plugin được khởi tạo. load_plugin_textdomain() Các hàm được sử dụng để tải chúng (load them).
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.
- Phát triển chủ đề WordPress từ đầu: Tạo ra giao diện trang web độc đáo
- 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
- Hướng dẫn toàn diện về phát triển theme WordPress: Từ con số không đến thành thục thông qua các bài học thực hành
- Hướng dẫn đầy đủ về phát triển chủ đề WordPress: Xây dựng các mẫu trang web chuyên nghiệp từ con số không