Hướng dẫn cuối cùng về phát triển plugin cho WordPress: Xây dựng plugin tùy chỉnh đầu tiên của bạn từ con số không

Đọc trong 3 phút
2026-03-13
2026-06-04
2,779
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.

Tại sao chọn phát triển plugin WordPress

WordPress trở thành hệ thống quản lý nội dung (CMS) phổ biến nhất thế giới nhờ vào khả năng mở rộng mạnh mẽ của nó, và điều này chủ yếu là nhờ vào cấu trúc plugin của nó. Bằng cách phát triển các plugin tùy chỉnh, bạn có thể thêm bất kỳ tính năng nào bạn muốn vào trang web mà không cần phải sửa đổi mã nguồn cốt lõi của WordPress. Điều này có nghĩa là các tính năng đó có thể tồn tại độc lập với giao diện (theme) của trang web, và vẫn hoạt động bình thường ngay cả khi bạn thay đổi theme. Quan trọng hơn nữa, một plugin tốt có thể giải quyết những vấn đề cụ thể của người dùng, thậm chí có thể trở thành một sản phẩm hoặc dịch vụ độc lập.

Việc nắm vững kỹ năng phát triển plugin có nghĩa là bạn đang chuyển từ một người sử dụng WordPress thành một nhà sáng tạo. Dù là để đáp ứng những yêu cầu cá nhân trong dự án của mình hay muốn tạo ra doanh thu bằng cách phát triển các plugin thương mại, việc hiểu rõ các nguyên lý cơ bản và thực hành tốt nhất trong quá trình phát triển plugin luôn là bước đầu tiên không thể thiếu. Hướng dẫn này sẽ hướng dẫn bạn từ những kiến thức cơ bản nhất về cấu trúc của plugin, từ đó dần xây dựng một plugin có chức năng đầy đủ và tuân thủ các tiêu chuẩn.

Xây dựng cấu trúc plugin đầu tiên của bạn

Một plugin chuẩn của WordPress là một thư mục chứa một hoặc nhiều tệp PHP, và thư mục gốc của nó phải có một tệp chính (main file). Tệp chính này cần chứa các thông tin đặc biệt về plugin, để WordPress có thể nhận diện và quản lý được nó.

Đọc thêm Nắm vững kỹ năng phát triển plugin cho WordPress: Xây dựng các mô-đun tùy chỉnh hiệu quả từ con số không

Tạo tệp chính của plugin

Việc đầu tiên bạn cần làm là tạo tập tin chính (main file) cho plugin của mình. Tập tin này thường được đặt tên theo tên của plugin đó. Ví dụ: my-first-plugin.phpỞ phần đầu của tệp này, bạn phải thêm một đoạn ghi chú tiêu đề plugin tiêu chuẩn.

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://yourwebsite.com/my-first-plugin
 * Description:       这是一个用于学习的 WordPress 自定义插件示例。
 * Version:           1.0.0
 * Author:            你的名字
 * Author URI:        https://yourwebsite.com
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 * Domain Path:       /languages
 */

Đoạn chú thích này chính là “giấy tờ tùy thân” (hay còn gọi là thông tin nhận diện) của plugin. Trong đó… Plugin NameTên plugin là trường bắt buộc duy nhất; các trường khác được sử dụng để cung cấp thêm thông tin. Trang “Plugins” trong giao diện quản trị WordPress sẽ đọc và hiển thị những thông tin này. Sau khi tạo xong tệp tin này, bạn cần đặt nó vào thư mục cài đặt của WordPress. /wp-content/plugins/ Nó nằm trong thư mục đó. Bạn có thể tạo một thư mục con có tên “my-first-plugin” và đặt tệp chính vào đó. Sau đó, hãy đăng nhập vào backend của WordPress, và bạn sẽ thấy nó trong danh sách các plugin và có thể kích hoạt nó. Mặc dù hiện tại nó chưa có chức năng gì cả, nhưng bạn đã thực hiện được bước đầu tiên quan trọng để thành công.

Organize your plugin files.

Khi số lượng chức năng tăng lên, việc viết toàn bộ mã nguồn trong một tệp chính sẽ trở nên khó bảo trì. Một cấu trúc tệp tin được tổ chức tốt là điều cực kỳ quan trọng. Một plugin điển hình có thể bao gồm các thư mục sau:
* /includes/Chứa các tệp chứa định nghĩa về các chức năng cốt lõi và các lớp (classes).
* /admin/Chứa các tệp liên quan đến giao diện quản trị nền (backend management interface).
* /public/Chứa các tệp chứa mã nguồn cho các tính năng phía trước (frontend) dành cho người truy cập trang web.
* /assets/Nơi lưu trữ các tài nguyên tĩnh như JavaScript, CSS, hình ảnh, v.v.
* /languages/Nơi lưu trữ các tệp dịch thuật quốc tế (.po/.mo).

Cấu trúc mô-đun hóa này không chỉ giúp mã nguồn trở nên rõ ràng hơn mà còn tạo điều kiện thuận lợi cho việc hợp tác nhóm và mở rộng chức năng trong tương lai. Trong tệp chính (main file)... my-first-plugin.php Trong đó, bạn thường sẽ sử dụng… require_once Để đưa các tệp chứa chức năng từ những thư mục này vào hệ thống.

Hiểu các khái niệm cơ bản về phát triển WordPress: Hook và Filter

Trọng tâm của việc phát triển plugin cho WordPress là cơ chế “Hook”. Cơ chế này cho phép bạn đưa đoạn mã của mình vào quá trình thực thi cốt lõi của WordPress vào những thời điểm nhất định, từ đó thay đổi hoặc thêm các chức năng mới. Có hai loại Hook: Action và Filter.

Đọc thêm Thành thạo phát triển plugin WordPress từ con số 0: Hướng dẫn thực hiện tính năng nâng cao và thực hành tốt nhất

Sử dụng action hook để thêm tính năng

Các “action hook” (khớp nối hành động) cho phép bạn thực thi các hàm tùy chỉnh của mình vào những thời điểm cụ thể trong quá trình hoạt động của WordPress. Ví dụ, bạn có thể muốn thực hiện một thao tác nào đó khi bài viết được đăng, hoặc thêm một menu vào thanh bên cạnh của giao diện quản trị.

Dưới đây là một ví dụ đơn giản, sử dụng… wp_footer Hook này sẽ hiển thị một thông báo trong khu vực công cộng ở phần chân trang của trang web. Bạn cần thêm đoạn mã sau vào tệp chính của plugin của mình.

function myplugin_add_footer_text() {
    echo '<p style="text-align:center;">Cảm ơn bạn đã sử dụng plugin đầu tiên của tôi!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' );

Ở đây,myplugin_add_footer_text Đó là hàm mà chúng ta đã định nghĩa.add_action() Hàm này sẽ “gắn kết” (bind) hàm đó với… wp_footer Hàm này được gắn vào một “hook” (điểm kết nối trong mã nguồn). Khi WordPress thực hiện việc hiển thị phần chân trang (footer), hàm của chúng ta sẽ được tự động gọi.

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%.

Sử dụng hook bộ lọc để sửa đổi nội dung

Khác với các hook hành động (action hooks), các hook lọc (filter hooks) được sử dụng để thay đổi dữ liệu. Hàm của bạn sẽ nhận một giá trị đầu vào, và sau khi xử lý, nó phải trả về một giá trị khác. Ví dụ: thay đổi tiêu đề của bài viết, hoặc thay đổi cách hiển thị nội dung, v.v.

Ví dụ dưới đây minh họa cách sử dụng… the_content Trình lọc 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 và nội dung trang.

function myplugin_append_to_content( $content ) {
    $custom_text = '<div class="myplugin-note"><p><em>Bài viết này được hiển thị một cách tốt hơn nhờ sự hỗ trợ của plugin tùy chỉnh của tôi.</em></p></div>';
    // 仅在主循环的单篇文章页面添加
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        return $content . $custom_text;
    }
    return $content;
}
add_filter( 'the_content', 'myplugin_append_to_content' );

Hàm myplugin_append_to_content Nhận được dữ liệu nguyên thủy. $contentChúng ta sử dụng các điều kiện để đảm bảo rằng văn bản chỉ được thêm vào những nơi thực sự cần thiết, sau đó trả về nội dung đã được sửa đổi.add_filter() Hàm đã hoàn tất quá trình đăng ký.

Đọc thêm Phát triển plugin cho WordPress: Từ cơ bản đến chuyên nghiệp – Xây dựng các tính năng tùy chỉnh và mở rộng hiệu quả

Tạo trang quản lý cho plugin

Hầu hết các plugin đều cần một trang cấu hình để người dùng có thể thiết lập các tùy chọn. WordPress cung cấp một API phong phú để tạo ra những giao diện quản trị đẹp mắt và tuân thủ các tiêu chuẩn.

thêm menu quản lý cấp cao nhất

Bạn có thể thêm một mục menu cấp cao mới vào thanh điều hướng bên trái của giao diện quản trị WordPress cho plugin của mình. Cách thực hiện như sau: add_menu_page() Được thực hiện bởi các hàm (functions). Chúng ta thường sử dụng chúng trong… admin_menu Hàm này được gọi trong hook hành động này.

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 myplugin_add_admin_menu() {
    add_menu_page(
        '我的插件设置', // 页面标签
        '我的插件',     // 菜单标题
        'manage_options', // 所需权限
        'myplugin-settings', // 菜单 Slug
        'myplugin_settings_page_html', // 显示页面内容的回调函数
        'dashicons-admin-generic', // 图标(可选)
        80 // 菜单位置(可选)
    );
}
add_action( 'admin_menu', 'myplugin_add_admin_menu' );

Xây dựng nội dung trang cấu hình

Bây giờ chúng ta cần định nghĩa hàm gọi lại (callback function) đã được đề cập ở trên. myplugin_settings_page_htmlĐây là đoạn mã HTML được sử dụng để hiển thị trang cấu hình (configuration page). Một phiên bản đơn giản như sau:

function myplugin_settings_page_html() {
    // 检查用户权限
    if ( ! current_user_can( 'manage_options' ) ) {
        return;
    }
    ?&gt;
    <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
            // 输出设置字段和非ce字段
            settings_fields( 'myplugin_options' );
            do_settings_sections( 'myplugin-settings' );
            submit_button( '保存设置' );
            ?>
        <input type="hidden" name="trp-form-language" value="vi"/></form>
    </div>
    &lt;?php
}

Hàm này tạo ra một biểu mẫu phù hợp với giao diện nền tảng WordPress. Để xử lý các thiết lập một cách đầy đủ, bạn cũng cần sử dụng thêm các công cụ/khối lệnh khác. register_setting(), add_settings_section()add_settings_field() Các hàm như vậy được sử dụng để định nghĩa các tùy chọn cụ thể, tạo nên quy trình làm việc hoàn chỉnh của “Settings API” – đây là phương pháp được khuyến nghị để lưu trữ và truy xuất các tùy chọn của plugin một cách an toàn.

Thực hiện một tính năng plugin thực tế: Thống kê số lần đọc bài viết

Hãy kết hợp các khái niệm trên lại với nhau để tạo ra một tính năng hữu ích: thống kê và hiển thị số lần xem cho từng bài viết.

Tạo các trường trong cơ sở dữ liệu và lưu trữ dữ liệu vào đó.

Trước hết, chúng ta cần tạo một nơi để lưu trữ số lần truy cập vào bài viết khi nó được đăng. Thông thường, chúng ta sử dụng tính năng post meta (metadata của bài viết) trong WordPress. Chúng ta có thể thực hiện điều này bằng cách… add_post_meta Một cách tốt hơn để thực hiện điều này là sử dụng một hàm, nhưng cách tinh tế hơn nữa là kiểm tra và cập nhật giá trị đó ngay khi bài viết được xem.

function myplugin_track_post_views( $post_id ) {
    if ( ! is_single() ) {
        return;
    }
    if ( empty( $post_id ) ) {
        global $post;
        $post_id = $post->ID;
    }
    // 获取当前浏览次数
    $count = get_post_meta( $post_id, 'myplugin_post_views', true );
    // 如果为空,初始化为0
    $count = $count ? absint( $count ) : 0;
    $count++;
    // 更新数据库
    update_post_meta( $post_id, 'myplugin_post_views', $count );
}
// 在模板重定向时触发,确保只对真实访客计数
add_action( 'template_redirect', 'myplugin_track_post_views' );

Hiển thị số lần truy cập trên giao diện người dùng (frontend).

Sau khi dữ liệu được lưu trữ, chúng ta cần một hàm để truy xuất và hiển thị nó. Chúng ta có thể tạo một mã ngắn (Shortcode) để giúp người dùng dễ dàng đưa nó vào nội dung bài viết hoặc các công cụ hiển thị ở bên cạnh (sidebar).

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

$post_id = absint( $atts['id'] );
    $views = get_post_meta( $post_id, 'myplugin_post_views', true );
    $views = $views ? $views : 0;

return '<span class="myplugin-view-count">Số lần truy cập: ' . esc_html( $views ) . '</span>'php
add_shortcode('myplugin_views', 'myplugin_display_post_views_shortcode');

Bây giờ, người dùng chỉ cần nhập mã ngắn vào trình soạn thảo bài viết là được. [myplugin_views]Hoặc bạn có thể thêm một tiện ích nhỏ (gọi là “tiện ích mã ngắn”) vào trang web của mình, sau đó nhập mã ngắn đó để hiển thị số lần người dùng truy cập bài viết đó trên trang. Ví dụ này minh họa toàn bộ quy trình, bao gồm việc lưu trữ dữ liệu (sử dụng các “hook”), truy xuất dữ liệu, và hiển thị dữ liệu trên giao diện người dùng (thông qua mã ngắn).

Tóm lại

Thông qua hướng dẫn này, bạn đã hoàn thành toàn bộ quá trình xây dựng một plugin tùy chỉnh cho WordPress từ con số không. Chúng ta đã bắt đầu bằng cách tìm hiểu cấu trúc cơ bản của plugin và tạo ra tệp chính chứa các thông tin tiêu đề tiêu chuẩn. Sau đó, chúng ta đã tìm hiểu sâu về những thành phần cốt lõi trong quá trình phát triển plugin WordPress – các hook (hành động và bộ lọc), và học cách sử dụng chúng để thêm hoặc chỉnh sửa các chức năng của plugin. Tiếp theo, chúng ta đã thiết kế trang quản trị chuyên nghiệp cho plugin, đây là yếu tố then chốt trong việc tương tác với người dùng. Cuối cùng, thông qua ví dụ thực tế về “thống kê số lần đọc bài viết”, chúng ta đã áp dụng những kiến thức lý thuyết vào thực hành, triển khai toàn bộ chuỗi chức năng từ việc lưu trữ dữ liệu đến việc hiển thị kết quả trên giao diện người dùng.

Hãy nhớ rằng, việc phát triển các plugin chất lượng không chỉ đơn thuần là khiến chúng hoạt động bình thường, mà còn cần chú trọng đến tính bảo mật của mã nguồn, khả năng bảo trì, hiệu suất, và sự tuân thủ các tiêu chuẩn lập trình của WordPress. Bằng cách liên tục thực hành và tìm hiểu thêm về các API của WordPress, bạn sẽ có thể tạo ra những plugin mạnh mẽ và được người dùng yêu thích.

FAQ 常见问题

Để phát triển các plugin, bạn cần có những kiến thức cơ bản sau:

Bạn cần có nền tảng lập trình PHP vững chắc, vì WordPress cùng các plugin của nó chủ yếu được viết bằng PHP. Việc am hiểu cơ bản về HTML, CSS và JavaScript cũng rất quan trọng, nhờ đó bạn có thể xây dựng giao diện người dùng và các chức năng tương tác. Việc nắm được một số khái niệm cơ bản về cơ sở dữ liệu MySQL sẽ giúp bạn hiểu rõ hơn cách WordPress lưu trữ dữ liệu.

Làm thế nào để gỡ lỗi (debug) plugin WordPress của tôi?

Trước tiên, hãy đảm bảo trong 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 và cảnh báo của PHP trên màn hình. Thứ hai, hãy sử dụ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ủ; đây là một phương pháp gỡ lỗi rất đáng tin cậy. Đối với các biến phức tạp, có thể kết hợp sử dụng nhiều công cụ khác nhau để tăng hiệu quả quá trình gỡ lỗi. print_r()var_dump()error_log()Ngoài ra, hãy sử dụng công cụ phát triển trình duyệt (F12) để gỡ lỗi các vấn đề liên quan đến JavaScript và CSS ở phía trước (front-end).

Làm thế nào để plugin của tôi tương thích với các phiên bản WordPress khác nhau?

Trong quá trình phát triển, bạn nên thường xuyên tham khảo Cẩm nang Phát triển Chính thức của WordPress để cập nhật những thay đổi về các hàm và hook (các điểm kết nối trong mã nguồn) giữa các phiên bản khác nhau của WordPress. function_exists()version_compare() Sử dụng các câu lệnh điều kiện để kiểm tra xem một hàm hoặc tính năng có khả dụng hay không, từ đó cung cấp các giải pháp thay thế nhằm đảm bảo tính tương thích với các phiên bản WordPress cũ hơn. Hãy nêu rõ phạm vi phiên bản WordPress mà plugin tương thích trong phần mô tả của nó. Việc liên tục thực hiện các bài kiểm thử trên nhiều phiên bản WordPress khác nhau là thực hành tốt nhất để đảm bảo tính tương thích.

Cần lưu ý những gì khi phát triển plugin thương mại?

Khi phát triển các plugin thương mại, tính bảo mật, chất lượng mã nguồn và trải nghiệm người dùng phải được đặt ở vị trí hàng đầu. Bạn cần xây dựng một hệ thống xác thực quyền đáng tin cậy và an toàn (ví dụ: sử dụng khóa giấy phép). Việc cung cấp tài liệu hướng dẫn người dùng rõ ràng và kịp thời, cùng với dịch vụ hỗ trợ kỹ thuật, là điều vô cùng quan trọng. Hãy đảm bảo tuân thủ các hướng dẫn phát triển plugin chính thức của WordPress và thỏa thuận cấp phép GPL. Hãy xem xét sử dụng các nền tảng chuyên nghiệp như Freemius hoặc Easy Digital Downloads để quản lý việc bán hàng, gửi cập nhật và xử lý các yêu cầu hỗ trợ từ người dùng.