Xóa bỏ product-category và toàn bộ slug của danh mục cha khỏi đường dẫn của Woocommerce

Hôm nay mình sẽ hướng dẫn các bạn cách xóa bỏ product-category đồng thời bỏ toàn bộ slug của danh mục cha ra khỏi đường dẫn tĩnh

Xóa bỏ product-category và toàn bộ slug của danh mục cha khỏi đường dẫn của Woocommerce

Xóa bỏ product-category và toàn bộ slug của danh mục cha khỏi đường dẫn của Woocommerce

Mình cũng không hiểu tại sao trong SEO lại cần đường dẫn kiểu rút gọn như vậy. Thấy bảo để tối ưu SEO thì biết thế… nhưng có cầu thì có cung… sau khi có yêu cầu mình đã ngâm cứu và viết ra đoạn code có thể đáp ứng yêu cầu trên.

Chúng ta sẽ lấy 1 ví dụ cụ thể để hiểu rõ hơn yêu cầu là cái mà đoạn code này làm được nhé.

Mặc định chúng ta có

Danh mục sản phẩm: http://domain.com/product-category/may-tinh
Danh mục con cấp 1: http://domain.com/product-category/may-tinh/may-tinh-de-ban
Danh mục con cấp 2: http://domain.com/product-category/may-tinh/may-tinh-de-ban/may-tinh-dell

Sau khi áp dụng đoạn code này chúng ta có:

Danh mục sản phẩm: http://domain.com/may-tinh
Danh mục con cấp 1: http://domain.com/may-tinh-de-ban
Danh mục con cấp 2: http://domain.com/may-tinh-dell

Code xóa bỏ product-category và bỏ toàn bộ slug của danh mục cha ra khỏi đường dẫn tĩnh

Chỉ cần cho đoạn code sau vào file functions.php của theme đang sử dụng. Sau đó vào update lại permalink tại Setting->Permalink->Save Change.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
 * */
// Remove product cat base
add_filter('term_link', 'devvn_no_term_parents', 1000, 3);
function devvn_no_term_parents($url, $term, $taxonomy) {
    if($taxonomy == 'product_cat'){
        $term_nicename = $term->slug;
        $url = trailingslashit(get_option( 'home' )) . user_trailingslashit( $term_nicename, 'category' );
    }
    return $url;
}
// Add our custom product cat rewrite rules
function devvn_no_product_cat_parents_rewrite_rules($flash = false) {
    $terms = get_terms( array(
        'taxonomy' => 'product_cat',
        'post_type' => 'product',
        'hide_empty' => false,
    ));
    if($terms && !is_wp_error($terms)){
        foreach ($terms as $term){
            $term_slug = $term->slug;
            add_rewrite_rule($term_slug.'/?$', 'index.php?product_cat='.$term_slug,'top');
            add_rewrite_rule($term_slug.'/page/([0-9]{1,})/?$', 'index.php?product_cat='.$term_slug.'&paged=$matches[1]','top');
            add_rewrite_rule($term_slug.'/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$', 'index.php?product_cat='.$term_slug.'&feed=$matches[1]','top');
        }
    }
    if ($flash == true)
        flush_rewrite_rules(false);
}
add_action('init', 'devvn_no_product_cat_parents_rewrite_rules');
/*Sửa lỗi khi tạo mới taxomony bị 404*/
add_action( 'create_term', 'devvn_new_product_cat_edit_success', 10);
add_action( 'edit_terms', 'devvn_new_product_cat_edit_success', 10);
add_action( 'delete_term', 'devvn_new_product_cat_edit_success', 10);
function devvn_new_product_cat_edit_success( ) {
    devvn_no_product_cat_parents_rewrite_rules(true);
}

Chú ý:

– Nhiều bạn không biết nhiều code thì copy đoạn code trên cho xuống cuối cùng file functions.php trong theme mà bạn đang dùng. Trước thẻ đóng ?> nếu có nhé. Không đến lúc lỗi 500 hay trang trắng lại không biết tại sao 😀
– Khi các bạn đã làm đường dẫn tính của danh mục sản phẩm về dạng này thì chú ý các link của bài viết hoặc page nhé. Nếu bị trùng slug thì sẽ dẫn đến sai đó ạ 🙂 điều này là tất nhiên rồi… Đều là chữ A không thể bắt mình đọc là chữ B được ạ

Chú ý quan trọng:

Nếu website của các bạn đã chạy 1 thời gian trước đây rồi. Và đã được google index link của danh mục sản phẩm rồi mà bây giờ muốn chuyển sang dạng url rút gọn này và không muốn mất đi thứ dạng google thì hãy comment bên dưới. Mình sẽ giúp các bạn giải quyết vấn đề đó (Không free nhé)

Mới hơn Cũ hơn