Tạo Settings Page đúng chuẩn WordPress, dễ mở rộng

Khi phát triển plugin WordPress, việc tạo trang cài đặt (Settings Page) là bước không thể thiếu. Tuy nhiên, rất nhiều plugin hiện nay viết phần này theo kiểu “mì ăn liền”, khó mở rộng, lẫn lộn logic, và không đúng chuẩn WordPress. Bài viết này hướng dẫn bạn cách tạo một Settings Page đúng chuẩn, dễ mở rộng, phù hợp với các plugin hiện đại.

Tạo Settings Page đúng chuẩn WordPress, dễ mở rộng

Vì sao cần viết đúng chuẩn?

  • Dễ bảo trì: Code rõ ràng, chia lớp hợp lý, không phụ thuộc theme.
  • Dễ mở rộng: Dễ thêm field, thêm tab, hay tùy chọn mà không sửa code cũ.
  • Tuân thủ nguyên tắc: Dùng hàm WordPress có sẵn như register_setting, add_settings_section, add_settings_field.
  • Thân thiện với người dùng: Có giao diện admin quen thuộc, dễ hiểu.

1. Cấu trúc chuẩn của Settings Page

<?php
// File: settings-page.php

add_action('admin_menu', 'myplugin_register_settings_page');
function myplugin_register_settings_page() {
    add_options_page(
        'Cài đặt Plugin',
        'Plugin Settings',
        'manage_options',
        'myplugin-settings',
        'myplugin_render_settings_page'
    );
}

add_action('admin_init', 'myplugin_register_settings');
function myplugin_register_settings() {
    register_setting('myplugin_settings_group', 'myplugin_settings');

    add_settings_section(
        'myplugin_main_section',
        'Cài đặt chính',
        null,
        'myplugin-settings'
    );

    add_settings_field(
        'myplugin_field_example',
        'Tên website',
        'myplugin_field_example_cb',
        'myplugin-settings',
        'myplugin_main_section'
    );
}

function myplugin_field_example_cb() {
    $options = get_option('myplugin_settings');
    $value = isset($options['site_name']) ? esc_attr($options['site_name']) : '';
    echo '<input type="text" name="myplugin_settings[site_name]" value="' . $value . '" class="regular-text">';
}

function myplugin_render_settings_page() {
    ?>
    <div class="wrap">
        <h1>Cài đặt Plugin</h1>
        <form method="post" action="options.php">
            <?php
                settings_fields('myplugin_settings_group');
                do_settings_sections('myplugin-settings');
                submit_button();
            ?>
        </form>
    </div>
    <?php
}

2. Mở rộng: Thêm nhiều tab trong cùng một page

Nếu plugin của bạn có nhiều chức năng, hãy chia các phần cấu hình thành tab để UX tốt hơn. Gợi ý sử dụng tab bằng HTML và kiểm tra $_GET['tab'] để xử lý logic.

// Thêm trong myplugin_render_settings_page()

$tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'general';

echo '<h2 class="nav-tab-wrapper">';
echo '<a href="?page=myplugin-settings&tab=general" class="nav-tab ' . ($tab === 'general' ? 'nav-tab-active' : '') . '">Cài đặt chung</a>';
echo '<a href="?page=myplugin-settings&tab=advanced" class="nav-tab ' . ($tab === 'advanced' ? 'nav-tab-active' : '') . '">Nâng cao</a>';
echo '</h2>';

Sau đó trong phần render, bạn kiểm tra `$tab` để gọi `do_settings_sections()` và `settings_fields()` tương ứng.

3. Lưu ý bảo mật

  • Luôn dùng esc_attr(), esc_html(), sanitize_text_field() hoặc các hàm tương ứng khi xuất dữ liệu.
  • Dùng current_user_can() để giới hạn quyền truy cập settings page.
  • Đặt tên option riêng biệt theo prefix plugin, ví dụ: myplugin_settings.

4. Template khuyên dùng

Để giảm boilerplate, bạn có thể dùng một file cấu hình PHP dạng mảng để khai báo các field và render tự động qua loop. Cách này giúp dễ thêm/sửa field chỉ trong 1 dòng.

// settings-config.php
return [
  'general' => [
    [
      'id' => 'site_name',
      'label' => 'Tên website',
      'type' => 'text',
    ],
    [
      'id' => 'enable_feature',
      'label' => 'Bật tính năng X',
      'type' => 'checkbox',
    ],
  ]
];

Sau đó trong code chính, bạn chỉ cần loop để render input, tiết kiệm rất nhiều thời gian cho plugin lớn.

5. Tải về plugin mẫu

Bạn có thể tải một plugin mẫu đã cài đặt sẵn Settings Page chuẩn WordPress tại đây:

Kết luận

Viết Settings Page đúng chuẩn WordPress không chỉ là để đẹp hay “chuẩn code”, mà còn là để mở rộng plugin dễ dàng, an toàn, và thân thiện với người dùng. Với phương pháp trong bài viết này, bạn có thể tạo hệ thống settings linh hoạt cho mọi dự án plugin của mình.

Bình luận


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...