Hướng dẫn toàn diện phát triển plugin WordPress: Xây dựng plugin riêng từ con số 0

Đọc trong 3 phút
2026-03-19
2026-06-03
2,587
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 công việc chuẩn bị trước khi phát triển

Trước khi bắt đầu viết mã, việc chuẩn bị đầy đủ là nền tảng quan trọng cho sự thành công của dự án. Bạn cần thiết lập một môi trường phát triển hiệu quả và an toàn.

Tạo môi trường phát triển và kiểm thử cục bộ

Rất khuyến khích không phát triển plugin trên máy chủ sản xuất. Sử dụng môi trường phát triển cục bộ cho phép bạn thử nghiệm mạnh dạn mà không lo sợ website bị sập. Bạn có thể sử dụng các công cụ như XAMPP, MAMP, Local by Flywheel hoặc Docker để nhanh chóng thiết lập một môi trường chạy WordPress bao gồm Apache/Nginx, MySQL và PHP trên máy tính cục bộ. Như vậy, việc chỉnh sửa và gỡ lỗi mã nguồn sẽ trở nên rất nhanh chóng.

Hiểu cấu trúc cơ bản của plugin WordPress

Một plugin WordPress đơn giản nhất có thể chỉ gồm một tệp chính. Tệp chính này cần một đoạn chú thích tiêu đề đặc biệt, dùng để thông báo cho WordPress biết thông tin cơ bản của plugin này. Ví dụ, một plugin có tênmy-first-plugin.phpnội dung tệp có thể như sau:

Đọc thêm Hướng dẫn toàn diện phát triển plugin WordPress: Xây dựng plugin chức năng đầu tiên từ con số 0

<?php
/**
 * Plugin Name:       我的第一个插件
 * Plugin URI:        https://example.com/my-first-plugin/
 * Description:       这是一个用于演示的简单插件。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       my-first-plugin
 */

Đặt tệp này vào/wp-content/plugins/thư mục, bạn sẽ thấy và kích hoạt nó trong trang “Plugins” ở bảng điều khiển WordPress. Đây là dạng cơ bản nhất của một plugin, mặc dù hiện tại nó chưa có chức năng nào.

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ế: tạo một plugin tự động thêm thông tin bản quyền vào cuối bài viết. Ví dụ này sẽ xuyên suốt một số khái niệm cốt lõi của plugin.

Xác định hàm chính của plugin

Chúng ta cần tạo một hàm để tạo và xuất thông tin bản quyền. Chúng ta sẽ đặt tên nó làmyplugin_add_copyright_text. Hàm này sẽ lấy thông tin bài viết hiện tại và kết hợp thành một đoạn văn bản tuyên bố bản quyền.

function myplugin_add_copyright_text( $content ) {
    if ( is_single() ) {
        $current_year = date( 'Y' );
        $copyright_text = '<p class="myplugin-copyright">© ' . $current_year . ' Bản quyền đã được bảo lưu. Bài viết này được xuất bản lần đầu trên trang web của tôi.</p>';
        $content .= $copyright_text;
    }
    return $content;
}

Sử dụng hook để tích hợp chức năng vào WordPress

Các hàm riêng lẻ sẽ không tự động chạy. Chúng ta cần sử dụng “Filter Hook” của WordPress để “gắn” hàm của mình trước khi nội dung bài viết được xuất ra. Ở đây chúng ta sử dụngthe_contentbộ lọc này.

add_filter( 'the_content', 'myplugin_add_copyright_text' );

Kết hợp phần đầu tệp và hai đoạn mã trên vào cùng mộtphptệp, một plugin có chức năng cơ bản đã hoàn thành. Nó sẽ thêm một thông báo bản quyền chứa năm hiện tại vào cuối nội dung của bài viết đơn lẻ.

Đọc thêm Từ Không Đến Có: Hướng Dẫn Nhập Môn và Thực Hành Tốt Nhất trong Phát Triển Plugin WordPress

Thêm kiểu cơ bản cho nội dung xuất ra

Để làm cho thông tin bản quyền trông đẹp mắt hơn, chúng ta có thể thêm một số kiểu CSS đơn giản. Thực hành tốt nhất là thông quawp_enqueue_stylehàm để xếp hàng tải biểu định kiểu, đảm bảo chỉ tải khi cần. Chúng ta cần tạo một tệp kiểustyle.cssvà đăng ký nó trong tệp plugin chính.
Thêm vào tệp plugin chính:

function myplugin_enqueue_styles() {
    wp_enqueue_style( 'myplugin-style', plugins_url( 'css/style.css', __FILE__ ) );
}
add_action( 'wp_enqueue_scripts', 'myplugin_enqueue_styles' );

Sau đó tạo trong thư mục plugincss/style.csstệp và thêm kiểu dáng:

.myplugin-copyright {
    font-size: 0.9em;
    color: #666;
    border-top: 1px solid #eee;
    padding-top: 10px;
    margin-top: 20px;
}

Thực hiện tùy chọn cấu hình plugin

Một plugin trưởng thành thường cho phép người dùng thực hiện một số tùy chỉnh. Chúng tôi sẽ thêm một trang cài đặt backend cho plugin bản quyền, cho phép người dùng thay đổi văn bản bản quyền.

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

Tạo trang menu cài đặt backend

Trước tiên, chúng ta cần thêm một mục menu con dưới menu “Cài đặt” trong backend quản trị WordPress. Điều này yêu cầu sử dụngadd_options_pageHàm.

function myplugin_add_settings_page() {
    add_options_page(
        '版权插件设置', // 页面标题
        '版权设置',     // 菜单标题
        'manage_options', // 权限
        'myplugin-settings', // 菜单slug
        'myplugin_render_settings_page' // 用于输出页面内容的回调函数
    );
}
add_action( 'admin_menu', 'myplugin_add_settings_page' );

Cài đặt đăng ký, khối và trường

WordPress cung cấp Settings API để xử lý tùy chọn một cách an toàn và thuận tiện. Chúng ta cần đăng ký một nhóm cài đặt, một tùy chọn cài đặt thực tế (lưu vào cơ sở dữ liệu) và một trường (hộp nhập liệu biểu mẫu).

function myplugin_register_settings() {
    register_setting( 'myplugin_settings_group', 'myplugin_copyright_text' );
    add_settings_section( 'myplugin_main_section', '主要设置', null, 'myplugin-settings' );
    add_settings_field( 'myplugin_text_field', '版权文本', 'myplugin_render_text_field', 'myplugin-settings', 'myplugin_main_section' );
}
add_action( 'admin_init', 'myplugin_register_settings' );

// 渲染文本字段的函数
function myplugin_render_text_field() {
    $option_value = get_option( 'myplugin_copyright_text', '© [year] 版权所有。本文首发于我的网站。' );
    echo '<input type="text" name="myplugin_copyright_text" value="' . esc_attr( $option_value ) . '" class="regular-text" />';
    echo '<p class="description">Bạn có thể sử dụng placeholder <code data-no-auto-translation="">[year]</code> để đại diện cho năm hiện tại.</p>';
}

Trong đó,myplugin_render_settings_pageHàm chịu trách nhiệm xuất cấu trúc HTML của toàn bộ trang cài đặt.

Đọc thêm Hướng dẫn toàn diện phát triển plugin WordPress: Xây dựng chức năng tùy chỉnh từ con số không

Sửa đổi hàm chính để hỗ trợ văn bản động

Bây giờ, chúng ta cần sửa đổi hàm chính ban đầumyplugin_add_copyright_text, để nó đọc văn bản do người dùng thiết lập từ cơ sở dữ liệu, và thay thế các placeholder.

function myplugin_add_copyright_text( $content ) {
    if ( is_single() ) {
        $text = get_option( 'myplugin_copyright_text', '© [year] 版权所有。本文首发于我的网站。' );
        $text = str_replace( '[year]', date( 'Y' ), $text );
        $copyright_text = '<p class="myplugin-copyright">' . $văn bản . '</p>';
        $content .= $copyright_text;
    }
    return $content;
}

Phát hành và bảo trì plugin

Sau khi phát triển hoàn tất và kiểm tra, bạn có thể muốn chia sẻ tác phẩm của mình với nhiều người hơn, điều này liên quan đến đóng gói, phát hành và cập nhật sau đó.

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.

Tuân theo tiêu chuẩn để đóng gói và phát hành

wp-content/plugins/Trong thư mục, plugin của bạn nên nằm trong một thư mục riêng biệt, ví dụmy-first-plugin/Thư mục này thường chứa ít nhất một tệp plugin chínhmy-first-plugin.php、mộtREADME.txt(mô tả plugin và phương pháp cài đặt)cũng như có thể tồn tạiassets(hình ảnh)、includes(tệp PHP bổ sung)、jscsstrong các thư mục con. Đảm bảo cấu trúc tệp rõ ràng.

Nếu bạn dự định gửi plugin lên thư mục plugin chính thức của WordPress, cần tuân thủ nghiêm ngặtHướng dẫn dành cho nhà phát triển, bao gồm tiêu chuẩn mã, bảo mật, khả năng tương thích và sử dụng Subversion (SVN) để kiểm soát phiên bản.

Đảm bảo tính bảo mật của plugin

Bảo mật là điều tối quan trọng. Luôn xác thực, làm sạch và thoát dữ liệu đầu vào từ người dùng và dữ liệu động.
1. 验证(Validation):检查数据是否符合预期的格式(如是否为邮箱、数字)。
2. 清理(Sanitization):在将数据存入数据库或用于其他操作前,移除其中的不安全字符。对于表单输入,使用sanitize_text_fieldsanitize_textarea_field
3. 转义(Escaping):在将数据从数据库输出到HTML页面时,确保其中的特殊字符被正确转换,防止XSS攻击。使用esc_htmlesc_attrwp_kses_post
Ví dụ, khi xuất các tùy chọn cài đặt vào biểu mẫu, chúng ta đã sử dụngesc_attr

echo '<input ... value="' . esc_attr( $option_value ) . '" ... />';

Lên kế hoạch đường dẫn cập nhật trong tương lai

Thiết lập một số phiên bản rõ ràng cho plugin của bạn (ví dụ: 1.0.0, tuân theo kiểm soát phiên bản ngữ nghĩa), và mỗi lần cập nhật, hãy cập nhật trong phần chú thích đầu của tập tin chính của pluginVersionThông tin.
Nếu cần cập nhật cấu trúc cơ sở dữ liệu hoặc di chuyển dữ liệu khi cập nhật plugin, có thể tận dụng cơ chế nâng cấp của WordPress. Bạn có thể so sánhget_option( ‘myplugin_version’ )số phiên bản cũ được lưu trữ với số phiên bản hiện tại, và thực hiện tác vụ nâng cấp khi phát hiện có sự thay đổi phiên bản.
Duy trì khả năng tương thích của plugin với phiên bản WordPress và PHP mới nhất, kiểm tra định kỳ, và liên tục cải thiện dựa trên phản hồi người dùng.

Tóm lại

Phát triển plugin WordPress là một quá trình biến ý tưởng thành chức năng, từ đó nâng cao khả năng của website. Bắt đầu từ việc tạo một tệpphpđơn giản, thông qua việc sử dụng action hooks và filter hooks để tích hợp chức năng, tận dụng Settings API để xây dựng giao diện cấu hình thân thiện với người dùng, cho đến cuối cùng tuân theo các quy chuẩn bảo mật và quản lý phiên bản để phát hành và bảo trì, mỗi bước đều thể hiện tư duy phát triển mô-đun hóa và chuẩn hóa. Cốt lõi nằm ở việc hiểu sâu hệ thống hooks và API của WordPress, và luôn đặt tính bảo mật cùng trải nghiệm người dùng lên hàng đầu. Nắm vững những kiến thức cơ bản này, bạn sẽ có khả năng xây dựng các công cụ mạnh mẽ đáp ứng nhu cầu cụ thể, thực sự hiện thực hóa việc “từ không đến có”.

FAQ 常见问题

Phát triển plugin WordPress cần những kiến thức cơ bản nào?

Bạn cần có kiến thức cơ bản về ngôn ngữ lập trình PHP, vì đây là ngôn ngữ phát triển cốt lõi của WordPress. Đồng thời, có hiểu biết cơ bản về HTML, CSS và JavaScript để xử lý giao diện và tương tác front-end. Hiểu các khái niệm cơ bản về cơ sở dữ liệu MySQL (như truy vấn) và các hàm cốt lõi, hooks (Actions và Filters) cũng như các API thông dụng (như Options API) của bản thân WordPress là điều không thể thiếu.

Làm thế nào để gỡ lỗi plugin tôi phát triển?

Phát triển plugin WordPress có một số phương pháp gỡ lỗi hiệu quả. Trước tiên, hãy đảm bảo bậtwp-config.phptrong tệpWP_DEBUGWP_DEBUG_LOGđể lỗi và thông tin được ghi lại vào/wp-content/debug.logTrong tập tin, tránh hiển thị trực tiếp cho người dùng. Thứ hai, có thể sử dụng rộng rãierror_log()hàm để in thông tin biến vào nhật ký. Ngoài ra, việc sử dụng công cụ dành cho nhà phát triển của trình duyệt (tab Console và Network) để kiểm tra lỗi JavaScript front-end và yêu cầu API, cũng như sử dụng IDE chuyên nghiệp (như PHPStorm, VS Code) để gỡ lỗi điểm dừng, đều là những phương pháp rất hiệu quả.

Plugin có thể gọi API của bên thứ ba không?

Hoàn toàn có thể. Plugin WordPress có thể gọi API của bên thứ ba (như dự báo thời tiết, mạng xã hội, cổng thanh toán, v.v.). Khi gọi, nên sử dụng các hàm HTTP API do WordPress cung cấp, chẳng hạn nhưwp_remote_get()wp_remote_post()Chúng an toàn hơn PHP cURL gốc hoặcfile_get_contentsvà được tích hợp sẵn các cơ chế như timeout, thử lại. Hãy đảm bảo xử lý các trường hợp API gọi có thể thất bại (như timeout mạng, mã lỗi trả về), đồng thời xác thực và làm sạch dữ liệu trả về một cách nghiêm ngặt để đảm bảo tính bảo mật.

Plugin của tôi làm thế nào để triển khai đa ngôn ngữ quốc tế hóa?

WordPress sử dụng công nghệ GNU gettext để thực hiện quốc tế hóa (i18n) và bản địa hóa. Trong plugin của bạn, tất cả văn bản cần dịch nên được bọc bằng các hàm cụ thể, ví dụ:__('文本', 'my-plugin-textdomain')Dùng để trả về chuỗi đã được dịch,_e('文本', 'my-plugin-textdomain')Dùng để xuất trực tiếp. Bạn cần định nghĩa trong phần đầu tệp pluginText Domainvà sử dụngload_plugin_textdomain()hàm vào thời điểm thích hợp (nhưinit(Hành động) Tải tệp dịch. Sau đó, sử dụng công cụ như Poedit để tạo.pottệp mẫu, để người dịch tạo ra các ngôn ngữ khác nhau.po.moTệp.

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

Phát triển plugin thương mại cần chú trọng hơn đến tính chuyên nghiệp. Chất lượng mã nguồn, thiết kế kiến trúc, bảo mật và hiệu suất đều cần đạt tiêu chuẩn cao hơn. Bạn cần thiết kế một hệ thống xác thực giấy phép rõ ràng, không xung đột (thường thực hiện qua máy chủ riêng hoặc dịch vụ bên thứ ba). Việc cung cấp tài liệu kỹ thuật chuyên nghiệp, sổ tay hướng dẫn người dùng và kênh hỗ trợ kỹ thuật kịp thời là rất quan trọng. Nhúng cơ chế cập nhật tự động trong plugin (sử dụng máy chủ riêng thay vì WordPress.org) có thể giúp người dùng dễ dàng nhận phiên bản mới và bản vá. Đồng thời, nhất định phải làm rõ thỏa thuận người dùng, chính sách bảo mật và đảm bảo plugin tuân thủ các quy định bảo vệ dữ liệu như GDPR.