Bắt đầu từ con số không: Hướng dẫn toàn diện và bài học thực hành về phát triển plugin cho WordPress

Đọc trong 3 phút
2026-03-12
2026-06-04
1,991
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.

Các khái niệm cốt lõi trong việc phát triển plugin cho WordPress

Trước khi nghiên cứu mã nguồn một cách sâu rộng, việc hiểu rõ nguyên lý cơ bản của các plugin WordPress là điều vô cùng quan trọng. Về bản chất, một plugin WordPress là một script PHP hoặc một tập hợp các script được thiết kế để mở rộng hoặc thay đổi các chức năng cốt lõi của WordPress thông qua hệ thống Hook tiêu chuẩn của WordPress. Trọng tâm của một plugin là tương tác một cách hoàn hảo với quy trình vận hành của WordPress mà không cần phải thay đổi trực tiếp các tệp cốt lõi của hệ thống.

Một “tệp tin cốt lõi” (core file) là một tệp PHP có các chú thích đặc biệt ở phần đầu tệp (header). Những chú thích này được sử dụng để WordPress nhận diện một plugin. Ví dụ, đây là cấu trúc của một tệp chính (main file) cho một plugin cơ bản nhất: my-first-plugin.php Đầu của tài liệu này phải chứa các thông tin sau:

<?php
/**
 * Plugin Name: 我的第一个插件
 * Description: 这是一个用于演示的简单WordPress插件。
 * Version: 1.0.0
 * Author: 你的名字
 */

Một khi tệp tin này được đặt vào… /wp-content/plugins/ Trong thư mục đó, trang “Các tiện ích mở rộng” (Plugins) trên giao diện quản trị WordPress sẽ tự động nhận diện và liệt kê tiện ích đó.

Đọc thêm Toàn Tập Phát Triển Chủ đề WordPress: Bắt Đầu Từ Con Số 0 Xây Dựng Chủ đề Website Cấp Chuyên Nghiệp

Cơ chế hoạt động của các plugin dựa trên hai khái niệm cốt lõi: Hook hành động (Action Hooks) và Hook lọc (Filter Hooks). Hook hành động cho phép bạn chèn mã của mình vào những thời điểm cụ thể trong quá trình thực thi của WordPress, chẳng hạn như sau khi bài viết được đăng hoặc trước khi các bảng định dạng được tải vào phần đầu trang. Bạn có thể sử dụng các hàm để thực hiện những tác vụ cần thiết. add_action() Bạn có thể “gắn” hàm của mình vào những “hook” (điểm kết nối) này. Các hook dùng để lọc dữ liệu cho phép bạn thay đổi nội dung dữ liệu trước khi nó được sử dụng hoặc lưu vào cơ sở dữ liệu; ví dụ như thay đổi nội dung bài viết, tiêu đề, hoặc phần trích dẫn. Điều này được thực hiện thông qua các cơ chế được thi add_filter() Việc hiểu rõ và sử dụng thành thạo hệ thống hook (các hàm được gọi tự động trong quá trình thực thi mã nguồn) là bước then chốt giúp bạn chuyển từ người dùng WordPress thành một nhà phát triể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%

Xây dựng plugin chức năng đầu tiên của bạn

Hãy bắt đầu với một ví dụ thực tế và hữu ích: tạo một tiện ích (plugin) tự động thêm phần tuyên bố bản quyền ở cuối trang bài viết trên trang web. Quá trình này sẽ bao gồm việc tạo tiện ích, sử dụng các hook (cơ chế kết nối giữa các thành phần của tiện ích), cũng như cấu hình cơ bản cho các tùy chọn của tiện ích đó.

Trước hết, trong môi trường cục bộ hoặc môi trường thử nghiệm của bạn… /wp-content/plugins/ Hãy tạo một thư mục mới trong thư mục hiện tại và đặt tên cho nó là… my-copyright-noticeTrong thư mục đó, hãy tạo tập tin plugin chính. my-copyright-notice.phpVà hãy viết đoạn mã sau:

&lt;?php
/**
 * Plugin Name: 文章版权声明
 * Description: 自动在文章内容末尾附加自定义版权声明。
 * Version: 1.0.0
 * Author: 开发者
 */

// 防止直接访问
if ( ! defined( &#039;ABSPATH&#039; ) ) {
    exit;
}

/**
 * 在文章内容后追加版权声明
 */
function mycn_add_copyright_to_content( $content ) {
    // 确保只在主循环的单篇文章中显示
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $site_url = get_site_url();
        $current_year = date( &#039;Y&#039; );
        // 构建版权文本,这里用 2026 作为示例,实际开发可动态获取
        $copyright_text = sprintf(
            &#039;<p><em>© 2026 %s. Bài viết này được tạo bởi… <strong>%s</strong> Nội dung này là bản gốc; nếu bạn muốn sao chép, vui lòng ghi rõ nguồn gốc.</em></p>',
            esc_html( get_bloginfo( 'name' ) ),
            esc_url( $site_url )
        );
        $content .= $copyright_text;
    }
    return $content;
}
// 将函数挂载到 ‘the_content’ 过滤器
add_filter( 'the_content', 'mycn_add_copyright_to_content' );

Plugin này minh họa cách sử dụng cơ bản của các bộ lọc (filters).mycn_add_copyright_to_content Hàm nhận vào nội dung bài viết. $contentThông qua các điều kiện kiểm tra, đảm bảo rằng thông tin bản quyền chỉ được thêm vào trang của một bài viết cụ thể và chỉ trong quá trình thực hiện truy vấn chính (main query). Sau đó, nội dung mới sẽ được sửa đổi và trả về.add_filter( ‘the_content’, ‘mycn_add_copyright_to_content’ ) Dòng mã này đã thực hiện việc chèn (inject) các chức năng cần thiết vào hệ thống.

Thêm giao diện quản lý và các tùy chọn cho plugin.

Một plugin trưởng thành thường cần cho phép người dùng thực hiện các thiết lập cần thiết. Điều này được thực hiện bằng cách tạo các trang tùy chọn trong giao diện quản trị của WordPress. Chúng ta sẽ thêm một trang cấu hình cho plugin bản quyền đã nói ở trên, để người dùng có thể tự định nghĩa nội dung văn bản liên quan đến bản quyền.

Đọc thêm Cách tùy chỉnh một giao diện WordPress độc đáo về chức năng và nổi bật về hình ảnh để đáp ứng nhu cầu chuyên nghiệp

Trước hết, chúng ta cần tạo một hàm để đăng ký một mục trong menu cài đặt. Việc này thường được thực hiện khi quản trị viên khởi tạo hệ thống.

修改你的 my-copyright-notice.php Đối với tệp tin, hãy thêm đoạn mã sau:

// 添加管理员菜单
function mycn_add_admin_menu() {
    add_options_page(
        '版权声明设置', // 页面标题
        '文章版权',     // 菜单标题
        'manage_options', // 权限
        'my_copyright_notice', // 菜单slug
        'mycn_settings_page_html' // 回调函数,用于输出页面HTML
    );
}
add_action( 'admin_menu', 'mycn_add_admin_menu' );

// 初始化插件的设置
function mycn_settings_init() {
    // 注册一个新的设置项到 ‘mycn_settings’ 组
    register_setting( ‘mycn_settings’, ‘mycn_copyright_text’ );

// 在 ‘mycn_settings’ 组内添加一个设置区块
    add_settings_section(
        ‘mycn_settings_section’,
        ‘自定义版权文本’,
        null, // 可选的区块描述回调函数
        ‘mycn_settings’
    );

// 向区块中添加字段
    add_settings_field(
        ‘mycn_copyright_field’,
        ‘版权声明’,
        ‘mycn_copyright_field_html’,
        ‘mycn_settings’,
        ‘mycn_settings_section’
    );
}
add_action( ‘admin_init’, ‘mycn_settings_init’ );

// 设置字段的HTML输出
function mycn_copyright_field_html() {
    $option = get_option( ‘mycn_copyright_text’, ‘© 2026 [site_name]. 本文原创自 [site_url]。’ );
    ?&gt;
    <textarea name="‘mycn_copyright_text’" rows="‘5’" cols="‘50’"><?php echo esc_textarea( $option ); ?></textarea>
    <p class="“description”">Hỗ trợ các mã ngắn: [site_name] – Tên trang web; [site_url] – Địa chỉ trang web.</p>
    <?php
}

// 设置页面的HTML结构
function mycn_settings_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( ‘mycn_settings’ );
            do_settings_sections( ‘mycn_settings’ );
            submit_button();
            ?>
        <input type="hidden" name="trp-form-language" value="vi"/></form>
    </div>
    &lt;?php
}

Tiếp theo, chúng ta cần sửa đổi những nội dung đã được thực hiện trước đó. mycn_add_copyright_to_content Hãy tạo một hàm sao cho nó sử dụng các tùy chọn đã được người dùng lưu trữ, và thay thế những đoạn mã ngắn (short codes) có trong chúng.

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%.
function mycn_add_copyright_to_content( $content ) {
    if ( is_single() &amp;&amp; in_the_loop() &amp;&amp; is_main_query() ) {
        $text = get_option( ‘mycn_copyright_text’, ‘© 2026 [site_name]. 本文原创自 [site_url]。’ );
        $text = str_replace(
            array( ‘[site_name]’, ‘[site_url]’ ),
            array( esc_html( get_bloginfo( ‘name’ ) ), esc_url( get_site_url() ) ),
            $text
        );
        $content .= ‘<p><em>’ . wp_kses_post( $text ) . ‘</em></p>’;
    }
    return $content;
}

Bây giờ, người dùng có thể thấy menu con “Bản quyền bài viết” (Article Copyright) trong menu “Cài đặt” (Settings) ở giao diện quản trị WordPress, và họ có thể tự định nghĩa nội dung của thông báo bản quyền đó.

Các thực hành tốt nhất về bảo mật, gỡ lỗi và hóa đa ngôn ngữ cho plugin

Khi phát triển một plugin để người khác sử dụng, bạn cần đảm bảo tính bảo mật, ổn định và khả năng bảo trì của nó. Dưới đây là một số thực hành tốt quan trọng cần được áp dụng:

安全性:永远不要信任用户输入。所有来自用户、数据库或第三方API的数据在输出到屏幕、插入到数据库或用于文件操作前都必须进行适当的转义或清理。WordPress提供了丰富的安全函数,如对HTML使用 esc_html()Đối với URL… esc_url(), 对HTML属性使用 esc_attr()Khi cần phép sử dụng một số thẻ HTML an toàn, hãy sử dụng chúng. wp_kses_post()wp_kses()Ở đầu của plugin, nhất định phải sử dụng… if ( ! defined( ‘ABSPATH’ ) ) exit; Để ngăn chặn việc truy cập trực tiếp vào các tệp tin.

Đọc thêm Hướng dẫn toàn diện về phát triển plugin WordPress: Từ kiến thức cơ bản đến việc triển khai thực tế trên trang web

调试:在开发过程中,启用 WP_DEBUG Constant values are of utmost importance. In your… wp-config.php tệp define( ‘WP_DEBUG’, true);Điều này sẽ hiển thị tất cả các lỗi, cảnh báo và thông báo PHP trên màn hình (chỉ trong môi trường phát triển). Đồng thời, nó được sử dụng kết hợp với các công cụ khác để tăng cường hiệu quả quá trình phát triển phần mềm. error_log() Các hàm hoặc các tiện ích gỡ lỗi như Query Monitor có thể giúp bạn theo dõi các biến và các truy vấn SQL một cách hiệu quả.

Chuẩn bị dịch (Quốc tế hóa/i18n): Để plugin của bạn có thể được sử dụng bởi người dùng trên toàn thế giới, tất cả các chuỗi hướng đến người dùng nên được chuẩn bị sẵn sàng để dịch. Điều này có nghĩa là không sử dụng tiếng Trung hoặc tiếng Anh mã hóa cứng, mà sử dụng các hàm dịch của WordPress.

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.

Ví dụ, hãy thay đổi thông tin về plugin trước đó như sau:

/**
 * Plugin Name: 文章版权声明
 * Description: 自动在文章内容末尾附加自定义版权声明。
 * Version: 1.0.0
 * Author: 开发者
 * Text Domain: my-copyright-notice
 */

Trong mã nguồn, hãy sử dụng các ký hiệu đặc biệt để đánh dấu những chuỗi văn bản có thể được dịch. __( ‘string’, ‘text-domain’ )_e( ‘string’, ‘text-domain’ ) Bao bọc hàm. Ví dụ, trong hàm trang cài đặt:

function mycn_settings_page_html() {
    if ( ! current_user_can( ‘manage_options’ ) ) {
        return;
    }
    ?&gt;
    <div class="“wrap”">
        <h1><?php echo esc_html( __( ‘版权声明设置’, ‘my-copyright-notice’ ) ); ?></h1>
        ...
    </div>
    &lt;?php
}

Sau đó, bạn có thể sử dụng các công cụ như Poedit để trích xuất những chuỗi này và tạo ra sản phẩm cần thiết. .pot tệp mẫu, cung cấp cho người dịch tạo .po/.mo Tệp ngôn ngữ.

Tóm lại

Việc phát triển plugin cho WordPress là quá trình biến những ý tưởng sáng tạo thành các tính năng cụ thể, sau đó tích hợp chúng một cách sâu rộng vào hệ thống quản lý nội dung (CMS) phổ biến nhất thế giới. Bạn có thể bắt đầu bằng cách hiểu rõ cơ chế hoạt động của các “hook” (khớp nối trong hệ thống WordPress), từ đó tạo ra những plugin có chức năng đơn giản. Việc xây dựng giao diện quản lý và các tùy chọn cho plugin sẽ giúp nó trở nên chuyên nghiệp và hữu ích hơn. Việc tuân thủ các nguyên tắc tốt nhất về bảo mật, khả năng gỡ lỗi (debugging) và hỗ trợ đa ngôn ngữ (internationalization) là yếu tố then chốt để đảm bảo rằng plugin của bạn hoạt động ổn định, an toàn và dễ được người dùng chấp nhận. Hãy nhớ rằng, cách học tốt nhất là thực hành ngay; hãy bắt đầu từ một nhu cầu thực tế và từng bước xây dựng, hoàn thiện plugin của mình.

FAQ 常见问题

Để phát triển các plugin cho WordPress, bạn cần nắm vững một số kiến thức cơ bản sau:

Bạn cần có nền tảng lập trình PHP vững vàng, vì 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 để tạo ra giao diện người dùng (front-end) và quản lý nội dung trang web. Việc nắm rõ cấu trúc cơ bản của WordPress là rất quan trọng, bao gồm các chủ đề (themes), loại bài viết (article types), hệ thống phân loại (categories), đặc biệt là các hệ thống hook như action hooks và filter hooks.

Làm thế nào để bắt đầu gỡ lỗi một plugin không hoạt động?

Trước hết, trong phần của bạn… wp-config.php Kích hoạt trong tệp WP_DEBUGWP_DEBUG_LOGĐiều này sẽ ghi thông tin lỗi vào tệp nhật ký thay vì hiển thị chúng cho người truy cập. Tiếp theo, hãy đảm bảo rằng plugin của bạn đã được kích hoạt. Sau đó, hãy kiểm tra ngữ pháp mã nguồn và xác nhận rằng tất cả các tên hàm, tên hook và đường dẫn tệp đều chính xác. var_dump()error_log() Hãy kiểm tra giá trị của các biến quan trọng, hoặc cài đặt các công cụ gỡ lỗi chuyên nghiệp cho WordPress (chẳng hạn như Query Monitor) để hỗ trợ việc tìm ra nguyên nhân sự cố.

Plugin của tôi nên được đặt trong thư mục nào?

Plugin của bạn phải được đặt trong thư mục cài đặt của WordPress. /wp-content/plugins/ Nằm bên trong thư mục đó. Bạn có thể trực tiếp tạo một tệp PHP trong thư mục này (phù hợp với các plugin đơn giản), nhưng cách làm chuẩn hơn là tạo một thư mục riêng biệt cho plugin của mình, và đặt tệp chính cùng các tệp tài nguyên khác (như JS, CSS, hình ảnh) vào thư mục đó. Tên của thư mục và tệp PHP chính phải độc đáo để tránh xung đột với các plugin khác.

Làm thế nào để tôi gửi plugin của mình lên danh mục plugin chính thức của WordPress?

Trước tiên, bạn cần đăng ký một tài khoản trên WordPress.org và nộp đơn yêu cầu phát hành plugin của mình. Mã nguồn của plugin phải tuân thủ các quy định và tiêu chuẩn chính thức của WordPress, bao gồm yếu tố bảo mật, không chứa mã độc hại, và phải có các chú thích đầu tệp (header comments) phù hợp. Bạn cũng cần cung cấp thông tin hợp lệ về plugin của mình. readme.txt Tệp tin của bạn có định dạng phù hợp với yêu cầu chính thức. Sau khi bạn nộp tệp tin, một nhóm chuyên gia kiểm tra các plugin sẽ tiến hành xem xét thủ công; quá trình này có thể mất vài tuần. Nếu được chấp thuận, plugin của bạn sẽ có thể được người dùng trên toàn thế giới tìm kiếm và cài đặt.