Hướng dẫn chi tiết và thực hành từ đầu về việc phát triển plugin cho WordPress

Đọc trong 3 phút
2026-03-15
2026-06-03
2,780
Tôi kiếm được hoa hồng khi bạn mua sắm thông qua các liên kết dưới đây, mà không phát sinh thêm chi phí nào cho bạn.

Hiểu rõ về cấu trúc cơ bản của các plugin WordPress

Trước khi bắt đầu phát triển, bạn cần hiểu rõ các khái niệm cốt lõi và cách thức hoạt động của các plugin cho WordPress. Về bản chất, một plugin là một tập hợp các tệp PHP có thể mở rộng chức năng cơ bản của WordPress, thường bao gồm tài liệu hướng dẫn, mã thực thi, các tệp tài nguyên, v.v. Việc vận hành của plugin hoàn toàn phụ thuộc vào hệ thống Hook (Các điểm kết nối) mà WordPress cung cấp.

Tìm hiểu cấu trúc tệp chuẩn của các plugin

Một plugin WordPress chuẩn thường tuân theo một cấu trúc thư mục nhất định. Tệp tin chính của plugin, ví dụ như… my-first-plugin.phpPhải được đặt ở… /wp-content/plugins/ Tệp này nằm trong thư mục chính hoặc một thư mục con của nó. Nó rất quan trọng vì chứa thông tin về tiêu đề (header) của plugin, được sử dụng để thông báo với hệ thống WordPress về plugin của bạn.

Một thư mục plugin điển hình có thể bao gồm các phần sau: tệp plugin chính, và các thư mục dùng để lưu trữ các tài nguyên tĩnh như JavaScript và CSS. assets/ Thư mục dùng để lưu các tệp lớp PHP. includes/ Mục lục, dùng cho giao diện người dùng admin/public/ Thư mục, cùng với các công cụ dùng để dịch tài liệu. languages/ Mục lục. Một cấu trúc tốt giúp tổ chức và bảo trì mã nguồn, đặc biệt là khi các chức năng của plugin trở nên phức tạp hơn.

Đọc thêm Phát triển plugin cho WordPress: Hướng dẫn từ cơ bản đến nâng cao – Cẩm nang toàn diện để xây dựng các tính năng tùy chỉnh

Nhận biết thông tin tiêu đề của các tệp plugin cốt lõi

Mỗi plugin đều phải bắt đầu bằng một loại thông tin đặc biệt (Header), và thông tin này được chứa trong các khối chú thích PHP. Đây là yếu tố then chốt để WordPress nhận diện plugin. Định dạng cơ bản như sau:

UltaHost – Nhà cung cấp dịch vụ máy chủ WordPress chuyên nghiệp
Bảo đảm hoàn tiền trong 30 ngày, băng thông và cơ sở dữ liệu không giới hạn, bảo vệ DDoS miễn phí, mua 3 năm ưu đãi 50%
<?php
/**
 * Plugin Name: 我的第一个插件
 * Plugin URI:  https://www.example.com/my-first-plugin
 * Description: 这是一个简短描述,介绍插件功能的句子。
 * Version:     1.0.0
 * Author:      你的名字
 * Author URI:  https://www.example.com
 * License:     GPL v2 or later
 * Text Domain: my-first-plugin
 * Domain Path: /languages
 */

Trong đó,Plugin Name Điều này là bắt buộc; các thông tin khác đều là tùy chọn nhưng được khuyến nghị nên điền vào. Đặc biệt là… Text DomainDomain PathChúng được thiết kế để hỗ trợ quá trình quốc tế hóa (hỗ trợ nhiều ngôn ngữ) cho các plugin. WordPress sẽ đọc thông tin này và hiển thị nó trên trang quản lý plugin ở phía sau hậu cần (backend).

Xây dựng môi trường phát triển cục bộ và tạo plugin đầu tiên

Trước khi bắt đầu lập trình, một môi trường phát triển địa phương được cô lập và cho phép thực hiện các lần thử nghiệm nhanh chóng là điều cực kỳ cần thiết. Điều này giúp tránh những rủi ro có thể phát sinh khi thử nghiệm trực tiếp trên trang web trực tuyến.

Cấu hình chuỗi công cụ phát triển cục bộ

Chúng tôi khuyến nghị bạn sử dụng các môi trường tích hợp trên máy chủ cục bộ, như Local by Flywheel, XAMPP hoặc Laragon. Những công cụ này cho phép bạn cài đặt đầy đủ PHP, MySQL và máy chủ web cần thiết cho WordPress chỉ với một cú nhấp chuột. Bạn cũng cần một trình soạn thảo mã, chẳng hạn như Visual Studio Code hoặc PHPStorm, để hỗ trợ hiển thị định dạng mã, gợi ý mã nguồn và chức năng gỡ lỗi. Hãy đảm bảo rằng phiên bản PHP bạn sử dụng tương thích với máy chủ mục tiêu; thông thường, phiên bản PHP 7.4 hoặc cao hơn được khuyến nghị.

Viết và kích hoạt một plugin đơn giản

Bây giờ, hãy cùng tạo ra plugin đầu tiên có chức năng thực sự (plugin đầu tiên có khả năng thực hiện một nhiệm vụ cụ thể). /wp-content/plugins/ Trong thư mục đó, hãy tạo một thư mục mới và đặt tên nó là… my-first-pluginTrong thư mục đó, hãy tạo một tệp có tên là my-first-plugin.php tệp.

Đọc thêm Hướng dẫn Tối thượng để Phát triển Plugin WordPress: Xây dựng Plugin Đầu tiên của Bạn từ Con số 0

Hãy sao chép thông tin tiêu đề plugin được đề cập ở phần trước vào đầu tệp này. Tiếp theo, chúng ta sẽ thêm một tính năng đơn giản: tự động thêm một đoạn văn bản tùy chỉnh vào cuối nội dung bài viết. Điều này yêu cầu sử dụng các “hook” (khung lập trình) của WordPress để xử lý nội dung bài viết. Hãy thêm đoạn mã sau ngay dưới phần thông tin tiêu đề:

// 在文章内容后添加自定义文本
function myfp_add_footer_text( $content ) {
    // 仅对主循环中的单篇文章生效
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $custom_text = '<p><em>Cảm ơn bạn đã đọc! Bài viết này được hỗ trợ bởi “My First Plugin”.</em></p>';
        $content .= $custom_text;
    }
    return $content;
}
// 将函数挂载到 ‘the_content’ 过滤器上
add_filter( 'the_content', 'myfp_add_footer_text' );

Sau khi lưu file, hãy đăng nhập vào trang quản trị WordPress của bạn và truy cập trang “Plugins” (Các tiện ích mở rộng). Bạn sẽ thấy một tiện ích mới có tên là “My First Plugin” (Tiện ích đầu tiên của tôi). Nhấp vào nút “Enable” (Kích hoạt). Tiếp theo, hãy xem một bài viết trên trang web của bạn; bạn sẽ nhận thấy rằng đoạn văn mà chúng ta vừa thêm đã xuất hiện ở cuối nội dung bài viết đó. Như vậy, tiện ích WordPress đầu tiên của bạn đã được kích hoạt và hoạt động thành công.

Nắm vững các công nghệ cốt lõi trong việc phát triển plugin

Khả năng mở rộng mạnh mẽ của WordPress dựa trên một số khái niệm cốt lõi: Hooks (Các hook), API Options (Giao diện lập trình ứng dụng cho các tùy chọn), Custom Post Types (CPT – Các loại bài viết tùy chỉnh), và các thao tác trên cơ sở dữ liệu. Việc nắm vững những khái niệm này là nền tảng cơ bản để phát triển nâng cao trên WordPress.

Hosting.com - lưu trữ chia sẻ
Hiệu năng cao, được trang bị CPU AMD EPYC, lưu trữ SSD NVMe và LiteSpeed, hỗ trợ chuyên gia nội bộ 24 giờ/ngày, các biện pháp bảo mật tiên tiến bao gồm SSL, chống brute force, phần mềm độc hại và bảo vệ DDoS, tiết kiệm tới 73%.

Hiểu sâu về các hook liên quan đến hành động (actions) và bộ lọc (filters)

Hệ thống hook (khớp nối) là nền tảng cơ bản trong việc phát triển các plugin cho WordPress, được chia thành hai loại chính: Action (Hành động) và Filter (Bộ lọc). Các hook loại Action được kích hoạt tại những điểm thực thi cụ thể (chẳng hạn như khi trang được tải, hoặc khi bài viết được lưu), cho phép bạn thực hiện các thao tác như thêm menu hoặc gửi email. add_action() Hàm được sử dụng để thực hiện việc gắn (mount) các tài nguyên.

Ví dụ, hãy thêm một trang vào menu quản trị nền.

function myfp_add_admin_menu() {
    add_menu_page(
        '我的插件设置', // 页面标题
        '我的插件',     // 菜单标题
        'manage_options', // 权限
        'myfp-settings',  // 菜单slug
        'myfp_settings_page', // 回调函数,用于显示页面内容
        'dashicons-admin-generic', // 图标
        20
    );
}
add_action( 'admin_menu', 'myfp_add_admin_menu' );

Các hook (móc) của bộ lọc cho phép bạn “sửa đổi” dữ liệu. Chúng can thiệp vào dữ liệu trước khi nó được sử dụng (chẳng hạn như hiển thị trên trình duyệt hoặc lưu vào cơ sở dữ liệu), và bạn có thể thay đổi nó rồi trả về giá trị mới. Chúng ta đã sử dụng những hook này trong plugin đầu tiên của mình. the_content Đó chỉ là một hook (khớp nối) dùng để xử lý các bộ lọc (filters) thôi.

Đọc thêm Hướng dẫn toàn diện về phân tích sâu WooCommerce: Xây dựng website thương mại điện tử hiệu suất cao từ con số 0

Sử dụng API tùy chọn để lưu trữ cài đặt của plugin

Các plugin thường cần lưu trữ một số cấu hình, chẳng hạn như khóa API, trạng thái bật/tắt, v.v. WordPress cung cấp công cụ để thực hiện việc này. Options API Để xử lý loại dữ liệu này một cách dễ dàng, các hàm cốt lõi bao gồm: add_option(), get_option(), update_option()delete_option()

Hãy tạo một trang cài đặt đơn giản để sử dụng các hàm này. Trước tiên, hãy định nghĩa các hàm xử lý sự kiện (callback functions) cho menu như đã được mô tả ở trên. myfp_settings_page Để hiển thị một biểu mẫu:

Máy chủ chia sẻ của InterServer
Lưu trữ chia sẻ với mức phí $2,50 USD mỗi tháng, giảm giá $0,1 USD trong tháng đầu tiên, mã giảm giá tryinterserver, với 461 ứng dụng đám mây và cài đặt chỉ bằng một cú nhấp chuột.
function myfp_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>Cài đặt plugin của tôi</h1>
        <form method="post" action="/vi/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'myfp_settings_group' ); // 输出安全字段
            do_settings_sections( 'myfp-settings' );  // 输出设置部分
            submit_button(); // 输出提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="vi"/></form>
    </div>
    &lt;?php
}

Sau đó, bạn cần sử dụng… register_setting(), add_settings_section()add_settings_field() Sử dụng các hàm như `declare` và `initialize` để khai báo và thiết lập các trường cấu hình này. Quá trình này sẽ đảm bảo rằng dữ liệu được lưu trữ một cách an toàn. wp_options bảng.

Xây dựng một ví dụ về plugin thực tế hoàn chỉnh

Chúng ta sẽ tích hợp những kiến thức đã học trước đó để tạo ra một tiện ích mở rộng (plugin) khá phức tạp nhưng rất hữu ích: tiện ích “Ước lượng Thời gian Đọc Bài Viết”. Tiện ích này sẽ hiển thị thời gian dự kiến cần để đọc hết nội dung bài viết ngay dưới tiêu đề

Tạo tệp chính của plugin và các hàm chức năng

Tạo thư mục mới cho các tiện ích mở rộng (plugins). post-reading-time Và tệp chính (Main file) post-reading-time.phpHãy điền thông tin tiêu chuẩn cho phần đầu của plugin. Sau đó, chúng ta sẽ tạo các hàm cốt lõi để tính toán thời gian đọc nội dung.

function prt_calculate_reading_time( $post_id ) {
    // 获取文章内容
    $content = get_post_field( 'post_content', $post_id );
    // 清除HTML标签和短代码,只计算文字
    $text = strip_tags( strip_shortcodes( $content ) );
    // 计算字数(中英文混合场景的简单处理)
    $word_count = mb_strlen( $text, 'UTF-8' );
    // 假设平均阅读速度为每分钟300字(可根据需要调整)
    $reading_speed = 300;
    // 计算分钟数,至少1分钟
    $minutes = floor( $word_count / $reading_speed );
    if ( $minutes < 1 ) {
        $minutes = 1;
    }
    // 返回包含时间的字符串
    return sprintf( _n( '约 %d 分钟读完', '约 %d 分钟读完', $minutes, 'post-reading-time' ), $minutes );
}

Hiển thị nội dung trên giao diện người dùng (frontend) thông qua việc tích hợp với hệ thống quản lý từ phía máy chủ (backend).

Tiếp theo, chúng ta cần quyết định cách hiển thị thời gian này. Cách làm phổ biến nhất là thêm nó vào meta-dữ liệu của bài viết (phía dưới tiêu đề). the_content Các hook cụ thể được cung cấp bởi bộ lọc (filter) hoặc chủ đề (theme). Ở đây, chúng ta sẽ sử dụng một hook hành động (action hook) phù hợp hơn. thesis_hook_before_post(Tùy thuộc vào chủ đề), hoặc theo một cách phổ quát hơn, có thể lọc trực tiếp nội dung bài viết.

Để tăng tính linh hoạt, chúng tôi đã tạo ra một mã ngắn (Shortcode) và một tiện ích nhỏ (Widget), đồng thời cung cấp một tùy chọn cài đặt đơn giản để kiểm soát việc hiển thị tự động hay không.

Trước tiên, hãy đăng ký một mã số ngắn:

function prt_reading_time_shortcode( $atts ) {
    $atts = shortcode_atts( array(
        'id' =&gt; get_the_ID(),
    ), $atts, 'reading_time' );

$time_text = prt_calculate_reading_time( $atts['id'] );
    return '<span class="reading-time">'. $time_text .'</span>'php
add_shortcode('reading_time', 'prt_reading_time_shortcode');

Sau đó, chúng ta có thể tự động thêm kết quả vào đầu nội dung bài viết (bằng cách sử dụng các bộ lọc).

function prt_prepend_to_content( $content ) {
    if ( is_single() && get_option( 'prt_auto_display', '1' ) == '1' ) {
        $time_html = '<div class="post-reading-time">' . prt_calculate_reading_time( get_the_ID() ) . '</div>';
        $content = $time_html . $content;
    }
    return $content;
}
add_filter( 'the_content', 'prt_prepend_to_content' );

Bạn cũng cần tạo thêm một tùy chọn cài đặt ở phía backend. prt_auto_displayNgười dùng có thể lựa chọn liệu có kích hoạt tính năng hiển thị tự động hay không. Như vậy, một plugin với chức năng đầy đủ và cấu trúc rõ ràng đã được xây dựng xong.

Tóm lại

Bắt đầu từ việc hiểu rõ cấu trúc cơ bản của các plugin và thông tin trong tệp header, chúng ta đã từng bước xây dựng môi trường phát triển và tạo ra plugin chức năng đầu tiên. Bằng cách tìm hiểu sâu về hệ thống hook – trái tim của khả năng mở rộng WordPress – chúng ta đã học được cách can thiệp vào quá trình thực thi và thay đổi dữ liệu mà không cần phải sửa đổi mã nguồn gốc của WordPress. Nhờ API Options, chúng ta có thể tạo ra các thiết lập cho plugin có thể được lưu trữ lâu dài. Cuối cùng, bằng cách xây dựng một ví dụ hoàn chỉnh về plugin “Dự đoán thời gian đọc bài viết”, chúng ta đã kết hợp kiến thức lý thuyết với thực hành, bao gồm toàn bộ quy trình phát triển từ việc viết logic chức năng, tạo mã ngắn (shortcodes) đến việc tích hợp với giao diện người dùng (frontend). Hãy nhớ rằng, việc phát triển plugin chất lượng cao bắt đầu từ việc lập kế hoạch rõ ràng, tuân thủ các tiêu chuẩn lập trình của WordPress, và luôn đặt an ninh, hiệu năng cũng như trải nghiệm người dùng lên hàng đầu.

FAQ 常见问题

Phát triển plugin WordPress cần những kiến thức tiên quyết nào?

Bạn cần có nền tảng lập trình PHP vững chắc, vì mã nguồn của các plugin chủ yếu được viết bằng PHP. Ngoài ra, bạn cũng cần hiểu biết cơ bản về HTML, CSS và JavaScript để có thể xử lý các phần hiển thị và tương tác trên trang web. Việc quen thuộc với các khái niệm cơ bản của MySQL sẽ giúp bạn hiểu rõ hơn về cách WordPress lưu trữ và truy vấn dữ liệu. Điều quan trọng nhất là bạn cần thành thói quen đọc các tài liệu hướng dẫn phát triển chính thức của WordPress (Codex) và tài liệu tham khảo dành cho nhà phát triển (Developer Reference).

Làm thế nào để đảm bảo plugin tôi phát triển là an toàn?

An toàn là yếu tố vô cùng quan trọng. Hãy luôn kiểm tra (validation) và làm sạch (sanitization) dữ liệu do người dùng nhập vào, đồng thời tiến hành việc “đánh dấu đặc biệt” (escaping) đối với các dữ liệu được hiển thị trên trang web. Hãy sử dụng các giá trị không phải là “nonce” (nonces) mà WordPress cung cấp để ngăn chặn hành vi xâm nhập từ nơi khác vào trang web của bạn (cross-site request forgery – CSRF). Khi xây dựng các truy vấn cơ sở dữ liệu, hãy nhớ tuân thủ các quy định an toàn tương ứng. $wpdb Các phương thức được cung cấp bởi lớp (như…) prepare()Để ngăn chặn tấn công SQL injection, hãy tránh sử dụng các hàm không an toàn. eval()Hãy cập nhật các tiện ích mở rộng (plugin) của bạn định kỳ để sửa các lỗ hổng đã biết.

Plugin nên được đặt vào thư mục nào?

Các plugin của WordPress phải được đặt tại đúng vị trí trên trang web. /wp-content/plugins/ Các tệp PHP chính của plugin có thể được đặt trực tiếp tại thư mục gốc của thư mục đó. Tuy nhiên, cách làm chuẩn hơn là tạo một thư mục con riêng biệt cho mỗi plugin, và đặt tất cả các tệp liên quan (PHP, JS, CSS, hình ảnh, v.v.) bên trong thư mục con đó. Điều này sẽ giúp cấu trúc tệp tin trở nên rõ ràng hơn và tránh xung đột với các plugin khác.

Làm thế nào để thêm trang cài đặt cho plugin của tôi?

Việc thêm trang cấu hình cho một plugin thường bao gồm một số bước: Đầu tiên, sử dụng… add_action( ‘admin_menu’, ‘your_function’ ) Hook để đăng ký một mục menu quản trị mới hoặc một mục con menu. Sau đó, trong hàm gọi lại (callback function), in ra nội dung của biểu mẫu HTML trên trang web. Tiếp theo, sử dụng… register_setting()add_settings_section()add_settings_field() Sử dụng các hàm API của bộ lập thiết lập (Settings API) để khai báo và liên kết các trường thiết lập của bạn; những hàm này sẽ tự động xử lý việc kiểm tra quyền, xác thực không dựa trên chuẩn CE (Common Encryption), và lưu trữ các tùy chọn. Cuối cùng, hãy sử dụng chúng trong biểu mẫu (form). settings_fields()do_settings_sections() Hàm được sử dụng để xuất ra các trường dữ liệu cần thiết.

Hook (Kẹp) là gì, và tại sao nó lại quan trọng đến vậy?

Hook (khóa móc) là những điểm cụ thể trong mã nguồn chính của WordPress cho phép các plugin và theme “kết nối” vào quá trình thực thi của nó. Chúng được chia thành hai loại: Hook hành động (Actions) và Hook bộ lọc (Filters). Hook hành động sẽ thực thi đoạn mã tùy chỉnh của bạn khi một sự kiện nhất định xảy ra, giúp thêm các chức năng mới vào hệ thống. Hook bộ lọc cho phép bạn thay đổi dữ liệu trước khi nó được sử dụng hoặc lưu trữ. Hệ thống hook là yếu tố then chốt trong tính mở rộng của WordPress; nó cho phép các nhà phát triển thay đổi hoặc nâng cấp chức năng của WordPress một cách đáng kể mà không cần phải sửa đổi các tệp nguồn gốc, từ đó đảm bảo tính nguyên vẹn và khả năng nâng cấp của phiên bản cốt lõi của WordPress.