Khi quản lý nội dung trong WordPress, việc tinh chỉnh cách hiển thị bài viết theo các tiêu chí cụ thể có thể nâng cao trải nghiệm người dùng và cải thiện khả năng tìm kiếm. Một phương pháp hiệu quả là mở rộng truy vấn để bao gồm các bài viết liên quan không chỉ từ danh mục hiện tại mà còn từ các thẻ có tên trùng với tên danh mục đó. Bài viết này sẽ hướng dẫn bạn cách thực hiện điều này, giúp bạn tạo ra một trải nghiệm phong phú hơn cho người dùng và tối ưu hóa khả năng hiển thị nội dung trên trang web của bạn.

function modify_category_query($query) {
    if (is_category() && $query->is_main_query()) {
        // Lấy tên và ID của chuyên mục hiện tại
        $category = get_queried_object();
        $category_name = $category->name;
        $category_id = $category->term_id;

        // Tìm tất cả các tag có tên trùng với tên chuyên mục
        $tags = get_terms(array(
            'taxonomy' => 'post_tag',
            'hide_empty' => false,
            'name' => $category_name
        ));
        $tag_ids = wp_list_pluck($tags, 'term_id');

        // Thay đổi query
        $query->set('tax_query', array(
            'relation' => 'OR',
            array(
                'taxonomy' => 'category',
                'field'    => 'term_id',
                'terms'    => $category_id
            ),
            array(
                'taxonomy' => 'post_tag',
                'field'    => 'term_id',
                'terms'    => $tag_ids
            )
        ));
    }
}
add_action('pre_get_posts', 'modify_category_query');

Mục Đích Của Hàm

Hàm này được thiết kế để tùy chỉnh truy vấn chính khi hiển thị các bài viết trong một danh mục. Mục tiêu là để truy vấn bao gồm không chỉ các bài viết thuộc về danh mục hiện tại mà còn các bài viết được gán các thẻ có tên trùng với tên của danh mục đó.

Cách Hoạt Động

Kiểm Tra Điều Kiện

Đầu tiên, hàm kiểm tra xem truy vấn hiện tại có phải là truy vấn chính của một danh mục không và không phải là một truy vấn phụ. Điều này đảm bảo rằng chỉ các truy vấn chính của các danh mục mới bị ảnh hưởng.

if (is_category() && $query->is_main_query()) {

Lấy Thông Tin Danh Mục

Sử dụng hàm get_queried_object(), hàm lấy đối tượng danh mục hiện tại, bao gồm tên và ID của nó. Thông tin này được sử dụng để xác định các thẻ có liên quan.

$category = get_queried_object();
$category_name = $category->name;
$category_id = $category->term_id;

Tìm Các Thẻ Phù Hợp

Hàm tìm tất cả các thẻ có tên trùng với tên của danh mục hiện tại bằng cách sử dụng hàm get_terms(). Các ID của những thẻ này được lấy ra bằng wp_list_pluck().

$tags = get_terms(array(
    'taxonomy' => 'post_tag',
    'hide_empty' => false,
    'name' => $category_name
));
$tag_ids = wp_list_pluck($tags, 'term_id');

Tùy Chỉnh Truy Vấn

Cuối cùng, hàm thay đổi truy vấn chính để bao gồm các bài viết thuộc danh mục hiện tại và các thẻ phù hợp. Điều này được thực hiện bằng cách sử dụng tax_query để kết hợp các điều kiện với relation là ‘OR’.

$query->set('tax_query', array(
    'relation' => 'OR',
    array(
        'taxonomy' => 'category',
        'field'    => 'term_id',
        'terms'    => $category_id
    ),
    array(
        'taxonomy' => 'post_tag',
        'field'    => 'term_id',
        'terms'    => $tag_ids
    )
));

Gắn Hàm Vào Hook

Hàm được gắn vào hook pre_get_posts để đảm bảo rằng truy vấn được tùy chỉnh trước khi các bài viết được lấy từ cơ sở dữ liệu.

add_action('pre_get_posts', 'modify_category_query');

Lợi Ích

  • Cải Thiện Trải Nghiệm Người Dùng: Bằng cách bao gồm các bài viết liên quan từ các thẻ cùng tên, người dùng có thể khám phá nhiều nội dung hơn mà không bị giới hạn bởi danh mục duy nhất.
  • Tăng Cường SEO: Hiển thị các bài viết liên quan giúp cải thiện liên kết nội bộ và cung cấp giá trị gia tăng cho người dùng, điều này có thể ảnh hưởng tích cực đến SEO.

Hàm này là một công cụ mạnh mẽ để tinh chỉnh cách hiển thị nội dung trên trang web của bạn, mang lại một trải nghiệm phong phú hơn cho người dùng và tăng cường khả năng tìm kiếm nội dung liên quan.