Cách cài đặt base của danh mục sản phẩm giống với base của trang sản phẩm

Thêm một bài viết nữa liên quan tới đường dẫn của woocommerce mà mình muốn chia sẻ với mọi người. Trước đây mình có viết bài Hướng dẫn xóa product, product-category trong đường dẫn của woocommerce để có thể loại bỏ chữ product và product-category khỏi đường dẫn.

Các bài viết có thể bạn quan tâm:

  1. Xóa bỏ product-category và toàn bộ slug của danh mục cha khỏi đường dẫn của Woocommerce 
  2. Hướng dẫn xóa product, product-category trong đường dẫn của woocommerce

Nhưng hôm nay lại khác. Mình sẽ không xóa nó đi nữa, thay vào đó sẽ cài đặt để cho base của danh mục sản phẩm giống với base của trang sản phẩm. Cụ thể sau khi làm xong bài này chúng ta sẽ như sau:

  • Trang sản phẩm: http://your-domain.com/san-pham
  • Trang danh mục: http://your-domain.com/san-pham/mon-khai-vi
  • Trang chi tiết: http://your-domain.com/san-pham/mon-khai-vi/canh-ga-nuong

Trước tiên bạn phải chắc chắn mình đã có 1 Page Sẩn phẩm với slug là san-pham

và đặt page đó làm trang Shop của Woocommerce

Tiếp theo là cách cài đặt để được dạng đường dẫn như trên. Bạn vào Setting / Permalink. Tại đây bạn sẽ cài đặt như sau

  • Product category base: san-pham
  • Custom base: /san-pham/%product_cat%

Sau khi làm xong hãy lưu lại và kiểm tra các đường dẫn:

  • Trang sản phẩm: http://your-domain.com/san-pham (Đã làm việc)
  • Trang danh mục: http://your-domain.com/san-pham/mon-khai-vi (Lỗi 404)
  • Trang chi tiết: http://your-domain.com/san-pham/mon-khai-vi/canh-ga-nuong (Đã làm việc)

Vậy làm sao để sửa lỗi 404. Đoạn code sau sẽ giải quyết được vấn đề lỗi 404 tại trang danh mục. Bạn chèn đoạn code này vào file functions.php của theme đang sử dụng

function devvn_product_category_base_same_shop_base( $flash = false ){
    $terms = get_terms(array(
        'taxonomy' => 'product_cat',
        'post_type' => 'product',
        'hide_empty' => false,
    ));
    if ($terms && !is_wp_error($terms)) {
        $siteurl = esc_url(home_url('/'));
        foreach ($terms as $term) {
            $term_slug = $term->slug;
            $baseterm = str_replace($siteurl, '', get_term_link($term->term_id, 'product_cat'));

            add_rewrite_rule($baseterm . '?$','index.php?product_cat=' . $term_slug,'top');
            add_rewrite_rule($baseterm . 'page/([0-9]{1,})/?$', 'index.php?product_cat=' . $term_slug . '&paged=$matches[1]','top');
            add_rewrite_rule($baseterm . '(?:feed/)?(feed|rdf|rss|rss2|atom)/?$', 'index.php?product_cat=' . $term_slug . '&feed=$matches[1]','top');

        }
    }
    if ($flash == true)
        flush_rewrite_rules(false);
}
add_filter( 'init', 'devvn_product_category_base_same_shop_base');

/*Sửa lỗi khi tạo mới taxomony bị 404*/
add_action( 'create_term', 'devvn_product_cat_same_shop_edit_success', 10, 2 );
function devvn_product_cat_same_shop_edit_success( $term_id, $taxonomy ) {
    devvn_product_category_base_same_shop_base(true);
}

Sau khi thêm code vào file functions.php hãy vào lại Setting / Permalink để update lại Permalink một lần nữa (Save change) Vậy là đã xong!

Chú ý: Nếu có phát sinh lỗi hãy comment để mình sửa nhé 🙂

Chúc các bạn thành công!

Cách cài đặt base của danh mục sản phẩm giống với base của trang sản phẩm
5 (100%) 7 votes
  • Bình luận
Có thể bạn quan tâm
x