Thêm CSS Tùy Chỉnh Cho Bài Viết và Sản Phẩm Trong WordPress

2 Tháng 5, 2025

Bạn đang muốn áp dụng CSS tùy chỉnh cho từng bài viết hoặc sản phẩm riêng lẻ trong WordPress? Hoặc muốn có một khu vực cấu hình CSS chung cho toàn bộ bài viết (post) hoặc sản phẩm (product)? Bài viết này sẽ hướng dẫn bạn cách thiết lập đầy đủ cả hai nhu cầu một cách chuyên nghiệp.


✅ Tính năng nổi bật

  • Thêm khung nhập CSS riêng trong từng bài viết và sản phẩm.
  • Tạo một menu riêng trong WordPress Admin để cấu hình CSS dùng chung.
  • Ưu tiên CSS riêng nếu có, CSS chung chỉ áp dụng khi bài viết/sản phẩm không có CSS riêng.
  • Không dùng plugin bên ngoài – bạn có toàn quyền kiểm soát!

🧩 Hướng dẫn chi tiết

1. Thêm CSS riêng cho từng bài viết và sản phẩm

Trong file functions.php của theme hoặc plugin tùy chỉnh, thêm đoạn mã sau để tạo khung nhập CSS

function giza_add_custom_css_meta_box() {
    foreach (['post', 'product'] as $post_type) {
        add_meta_box(
            'giza_custom_css_box',
            '🎨 CSS Tùy chỉnh riêng',
            'giza_custom_css_box_callback',
            $post_type,
            'normal',
            'high'
        );
    }
}
add_action('add_meta_boxes', 'giza_add_custom_css_meta_box');

function giza_custom_css_box_callback($post) {
    $css_code = get_post_meta($post->ID, '_giza_custom_css', true);
    ?>
    <textarea name="giza_custom_css" style="width:100%;height:150px;" placeholder="CSS chỉ áp dụng cho bài viết/sản phẩm này..."><?php echo esc_textarea($css_code); ?></textarea>
    <?php
    wp_nonce_field('giza_save_custom_css', 'giza_custom_css_nonce');
}

function giza_save_custom_css($post_id) {
    if (!isset($_POST['giza_custom_css_nonce']) || !wp_verify_nonce($_POST['giza_custom_css_nonce'], 'giza_save_custom_css')) return;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;

    update_post_meta($post_id, '_giza_custom_css', wp_kses_post($_POST['giza_custom_css']));
}
add_action('save_post', 'giza_save_custom_css');

2. Tạo menu riêng để quản lý CSS toàn site

Menu này cho phép bạn cấu hình CSS áp dụng toàn bộ bài viết hoặc toàn bộ sản phẩm

function giza_add_admin_menu() {
    add_menu_page(
        'CSS Tùy chỉnh',
        'CSS tuỳ chỉnh',
        'manage_options',
        'giza-css-settings',
        'giza_css_settings_page',
        'dashicons-art',
        81
    );
}
add_action('admin_menu', 'giza_add_admin_menu');

function giza_css_settings_page() {
    ?>
    <div class="wrap">
        <h1>🎨 Cài đặt CSS Tùy chỉnh</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('giza_css_options');
            do_settings_sections('giza-css-settings');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

function giza_register_settings() {
    register_setting('giza_css_options', 'giza_css_post');
    register_setting('giza_css_options', 'giza_css_product');

    add_settings_section('giza_css_section', 'CSS áp dụng toàn site', null, 'giza-css-settings');

    add_settings_field('giza_css_post', 'CSS cho tất cả bài viết (post)', 'giza_css_post_callback', 'giza-css-settings', 'giza_css_section');
    add_settings_field('giza_css_product', 'CSS cho tất cả sản phẩm (product)', 'giza_css_product_callback', 'giza-css-settings', 'giza_css_section');
}
add_action('admin_init', 'giza_register_settings');

function giza_css_post_callback() {
    $value = get_option('giza_css_post', '');
    echo '<textarea name="giza_css_post" style="width:100%;height:150px;" placeholder="CSS áp dụng cho toàn bộ bài viết...">' . esc_textarea($value) . '</textarea>';
}
function giza_css_product_callback() {
    $value = get_option('giza_css_product', '');
    echo '<textarea name="giza_css_product" style="width:100%;height:150px;" placeholder="CSS áp dụng cho toàn bộ sản phẩm...">' . esc_textarea($value) . '</textarea>';
}

3. Hiển thị CSS ra ngoài trang web

CSS sẽ được in ra <head> nếu điều kiện phù hợp

function giza_output_custom_css() {
    if (is_singular('post') || is_singular('product')) {
        global $post;

        $post_css = get_post_meta($post->ID, '_giza_custom_css', true);
        if ($post_css) {
            echo "<style id='giza-post-css'>\n$post_css\n</style>";
        } else {
            if (is_singular('post')) {
                $global_css = get_option('giza_css_post', '');
            } elseif (is_singular('product')) {
                $global_css = get_option('giza_css_product', '');
            }
            if (!empty($global_css)) {
                echo "<style id='giza-global-css'>\n$global_css\n</style>";
            }
        }
    }
}
add_action('wp_head', 'giza_output_custom_css');

📌 Lưu ý

  • Bạn có thể sử dụng cả CSS chungCSS riêng từng bài viết, trong đó CSS riêng luôn được ưu tiên.

Blog ..

Hướng dẫn dịch vụ ..

Sản phẩm nổi bật

dịch vụ chất lượng khách hàng tin tưởng

NVMe VPS

Tốc độ cao và bảo mật

Xem thêm

SSD VPS

Hiệu năng và tối ưu chi phí

Xem thêm

Proxy

Ẩn danh và mượt mà

Xem thêm

NVMe Hosting

Ổn định và tiện dụng

Xem thêm