Nếu bạn muốn tự động thêm thẻ tag vào bài viết WordPress của mình dựa trên nội dung tiêu đề, bạn đã đến đúng nơi. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn từng bước để tạo một hàm PHP giúp tự động thêm các thẻ tag vào bài viết mà không làm mất các thẻ tag hiện tại. Hãy cùng bắt đầu!

1. Tại Sao Nên Thêm Thẻ Tag Tự Động?

Thêm thẻ tag tự động có thể giúp cải thiện SEO của trang web và đảm bảo rằng các bài viết được phân loại đúng cách mà không cần bạn phải làm thủ công. Việc này cũng giúp người đọc dễ dàng tìm thấy bài viết của bạn thông qua các thẻ tag liên quan.

2. Đoạn Mã PHP Tự Động Thêm Thẻ Tag

Dưới đây là đoạn mã PHP mà bạn cần để tự động thêm thẻ tag vào bài viết của bạn. Đoạn mã này sẽ được chèn vào file functions.php trong theme của bạn hoặc trong một plugin tùy chỉnh.

// Hàm kiểm tra chính xác từ khóa thẻ tag
function auto_add_tags_from_title($post_id) {
    // Kiểm tra nếu đây là bài viết đã xuất bản
    if (get_post_status($post_id) != 'publish') {
        return;
    }

    // Lấy tiêu đề của bài viết
    $post_title = get_the_title($post_id);

    // Lấy tất cả các thẻ tag (bao gồm cả thẻ không có bài viết)
    $tags = get_terms(array(
        'taxonomy' => 'post_tag',
        'hide_empty' => false, // Bao gồm cả những thẻ tag không có bài viết
    ));

    // Lấy các thẻ tag đã có trong bài viết
    $existing_tags = wp_get_post_tags($post_id, array('fields' => 'names'));

    // Mảng chứa thẻ tag sẽ thêm vào bài viết
    $tags_to_add = array();

    // Kiểm tra xem tiêu đề có chứa các thẻ tag chính xác không
    foreach ($tags as $tag) {
        // Chuyển tiêu đề và tên tag sang chữ thường để không phân biệt hoa thường
        $lowercase_title = mb_strtolower($post_title);
        $lowercase_tag = mb_strtolower($tag->name);

        // Kiểm tra tiêu đề có chứa đúng thẻ tag không và thẻ chưa có trong bài viết
        if (preg_match('/(^|s|[p{P}])' . preg_quote($lowercase_tag, '/') . '(s|[p{P}]|$)/u', $lowercase_title) && !in_array($tag->name, $existing_tags)) {
            // Nếu tiêu đề chứa đúng tên thẻ tag và tag chưa có trong bài viết, thêm vào mảng
            $tags_to_add[] = $tag->name;
        }
    }

    // Nếu tìm thấy thẻ tag cần thêm
    if (!empty($tags_to_add)) {
        // Hợp nhất các thẻ tag mới và thẻ tag đã có
        $all_tags = array_unique(array_merge($existing_tags, $tags_to_add));

        // Cập nhật thẻ tag cho bài viết (chỉ thêm thẻ mới)
        wp_set_post_tags($post_id, $all_tags, false); // 'false' để giữ nguyên các tag đã có
    }
}

// Gắn hàm vào hook save_post
add_action('save_post', 'auto_add_tags_from_title');

3. Giải Thích Từng Bước

3.1. Kiểm Tra Trạng Thái Bài Viết

if (get_post_status($post_id) != 'publish') {
    return;
}

Chúng ta kiểm tra trạng thái của bài viết để đảm bảo rằng chỉ các bài viết đã được xuất bản mới được xử lý. Điều này tránh việc thêm thẻ tag vào các bài viết chưa được xuất bản hoặc đang ở trạng thái khác.

3.2. Lấy Tiêu Đề Bài Viết

$post_title = get_the_title($post_id);

Tiêu đề bài viết được lấy để kiểm tra sự xuất hiện của các thẻ tag trong tiêu đề.

3.3. Lấy Tất Cả Các Thẻ Tag

$tags = get_terms(array(
    'taxonomy' => 'post_tag',
    'hide_empty' => false, // Bao gồm cả những thẻ tag không có bài viết
));

Lấy tất cả các thẻ tag từ hệ thống, bao gồm cả những thẻ chưa được gắn vào bất kỳ bài viết nào.

3.4. Lấy Các Thẻ Tag Đã Có Trong Bài Viết

$existing_tags = wp_get_post_tags($post_id, array('fields' => 'names'));

Lấy danh sách các thẻ tag hiện có của bài viết, chỉ bao gồm tên của các thẻ tag.

3.5. Kiểm Tra và Thêm Thẻ Tag

foreach ($tags as $tag) {
    $lowercase_title = mb_strtolower($post_title);
    $lowercase_tag = mb_strtolower($tag->name);

    if (preg_match('/(^|s|[p{P}])' . preg_quote($lowercase_tag, '/') . '(s|[p{P}]|$)/u', $lowercase_title) && !in_array($tag->name, $existing_tags)) {
        $tags_to_add[] = $tag->name;
    }
}

Kiểm tra xem tên thẻ tag có xuất hiện trong tiêu đề của bài viết và không có trong danh sách thẻ tag hiện tại. Nếu điều kiện thỏa mãn, thẻ tag được thêm vào mảng $tags_to_add.

3.6. Cập Nhật Thẻ Tag Cho Bài Viết

if (!empty($tags_to_add)) {
    $all_tags = array_unique(array_merge($existing_tags, $tags_to_add));
    wp_set_post_tags($post_id, $all_tags, false); // 'false' để giữ nguyên các tag đã có
}

Hợp nhất các thẻ tag hiện tại và thẻ tag mới, loại bỏ các thẻ tag trùng lặp, và cập nhật bài viết với danh sách thẻ tag đã được xử lý.

3.7. Gắn Hàm Vào Hook save_post

add_action('save_post', 'auto_add_tags_from_title');

Gắn hàm auto_add_tags_from_title vào hook save_post để hàm này tự động được gọi mỗi khi một bài viết được lưu hoặc cập nhật.

4. Kết Luận

Với đoạn mã PHP này, bạn có thể tự động thêm thẻ tag vào bài viết WordPress dựa trên tiêu đề mà không làm mất các thẻ tag hiện tại. Việc này không chỉ giúp cải thiện SEO mà còn làm cho việc quản lý thẻ tag của bạn trở nên dễ dàng hơn. Hãy chắc chắn rằng mã của bạn được kiểm tra kỹ lưỡng trong môi trường phát triển trước khi triển khai trên trang web chính thức của bạn.