Loại bỏ chữ product và product-category trong đường dẫn của WooCommerce một cách đơn giản.

Theo mặc định, trong đường dẫn (permalink) của WooCommerce sẽ có thêm chữ product (sản phẩm) và product-category (danh mục sản phẩm). Điều này giúp phân biệt với đường dẫn của bài viết hay các chuyên mục của bài viết. WooCommerce không khuyến khích việc loại bỏ những chữ này để tránh lỗi trùng lặp hay xung đột đường dẫn giữa bài viết thông thường và sản phẩm. Tuy nhiên, nhiều bạn vẫn muốn loại bỏ chúng để đường dẫn của sản phẩm ngắn gọn hơn, thân thiện với công cụ tìm kiếm hơn.
Tham khảo thêm:
- Loại bỏ chữ category trong đường dẫn của WordPress
- Cấu trúc permalink nào tốt nhất dành cho WordPress?
Loại bỏ chữ product và product-category bằng code
Có nhiều phương pháp khác nhau để làm điều này, cả plugin lẫn code snippets. Tôi thấy một số trang đang chia sẻ code snippets giúp tùy biến đường dẫn của WooCommerce mà không cần dùng plugin. Cụ thể ở đây là code:
/*
* Code Bỏ /product/ hoặc /cua-hang/ hoặc /shop/ ... có hỗ trợ dạng %product_cat%
* Thay /cua-hang/ bằng slug hiện tại của bạn
*/
function devvn_remove_slug( $post_link, $post ) {
if ( !in_array( get_post_type($post), array( 'product' ) ) || 'publish' != $post->post_status ) {
return $post_link;
}
if('product' == $post->post_type){
$post_link = str_replace( '/san-pham/', '/', $post_link ); //Thay cua-hang bằng slug hiện tại của bạn
}else{
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
}
return $post_link;
}
add_filter( 'post_type_link', 'devvn_remove_slug', 10, 2 );
/*Sửa lỗi 404 sau khi đã remove slug product hoặc cua-hang*/
function devvn_woo_product_rewrite_rules($flash = false) {
global $wp_post_types, $wpdb;
$siteLink = esc_url(home_url('/'));
foreach ($wp_post_types as $type=>$custom_post) {
if($type == 'product'){
if ($custom_post->_builtin == false) {
$querystr = "SELECT {$wpdb->posts}.post_name, {$wpdb->posts}.ID
FROM {$wpdb->posts}
WHERE {$wpdb->posts}.post_status = 'publish'
AND {$wpdb->posts}.post_type = '{$type}'";
$posts = $wpdb->get_results($querystr, OBJECT);
foreach ($posts as $post) {
$current_slug = get_permalink($post->ID);
$base_product = str_replace($siteLink,'',$current_slug);
add_rewrite_rule($base_product.'?$', "index.php?{$custom_post->query_var}={$post->post_name}", 'top');
add_rewrite_rule($base_product.'comment-page-([0-9]{1,})/?$', 'index.php?'.$custom_post->query_var.'='.$post->post_name.'&cpage=$matches[1]', 'top');
add_rewrite_rule($base_product.'(?:feed/)?(feed|rdf|rss|rss2|atom)/?$', 'index.php?'.$custom_post->query_var.'='.$post->post_name.'&feed=$matches[1]','top');
}
}
}
}
if ($flash == true)
flush_rewrite_rules(false);
}
add_action('init', 'devvn_woo_product_rewrite_rules');
/*Fix lỗi khi tạo sản phẩm mới bị 404*/
function devvn_woo_new_product_post_save($post_id){
global $wp_post_types;
$post_type = get_post_type($post_id);
foreach ($wp_post_types as $type=>$custom_post) {
if ($custom_post->_builtin == false && $type == $post_type) {
devvn_woo_product_rewrite_rules(true);
}
}
}
add_action('wp_insert_post', 'devvn_woo_new_product_post_save');
// Remove Parent Category from Child Category URL
add_filter('term_link', 'devvn_no_category_parents', 1000, 3);
function devvn_no_category_parents($url, $term, $taxonomy) {
if($taxonomy == 'category'){
$term_nicename = $term->slug;
$url = trailingslashit(get_option( 'home' )) . user_trailingslashit( $term_nicename, 'category' );
}
return $url;
}
// Rewrite url mới
function devvn_no_category_parents_rewrite_rules($flash = false) {
$terms = get_terms( array(
'taxonomy' => 'category',
'post_type' => 'post',
'hide_empty' => false,
));
if($terms && !is_wp_error($terms)){
foreach ($terms as $term){
$term_slug = $term->slug;
add_rewrite_rule($term_slug.'/?$', 'index.php?category_name='.$term_slug,'top');
add_rewrite_rule($term_slug.'/page/([0-9]{1,})/?$', 'index.php?category_name='.$term_slug.'&paged=$matches[1]','top');
add_rewrite_rule($term_slug.'/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$', 'index.php?category_name='.$term_slug.'&feed=$matches[1]','top');
}
}
if ($flash == true)
flush_rewrite_rules(false);
}
add_action('init', 'devvn_no_category_parents_rewrite_rules');
/*Sửa lỗi khi tạo mới category bị 404*/
function devvn_new_category_edit_success() {
devvn_no_category_parents_rewrite_rules(true);
}
add_action('created_category','devvn_new_category_edit_success');
add_action('edited_category','devvn_new_category_edit_success');
add_action('delete_category','devvn_new_category_edit_success');
Tuy nhiên, trên thực tế những code này không tối ưu (cũng không được cập nhật thường xuyên) nên gây ảnh hưởng nghiêm trọng đến hiệu suất của website. Cụ thể, chúng có thể làm CPU và RAM của host bị quá tải, dẫn đến website load rất chậm, thậm chí bị lỗi 503 (quá tải). Tôi đã từng ghi nhận tình trạng này trên website của một số khách hàng. Các bạn tuyệt đối không nên sử dụng chúng.
Trong bài viết này, tôi sẽ giới thiệu cho các bạn cách đơn giản mà hiệu quả nhất, ít gây ảnh hưởng tới hiệu suất hoạt động của website.
Loại bỏ chữ product và product-category bằng plugin
1. Đầu tiên, các bạn cần phải cài đặt và kích hoạt một plugin có tên là Premmerce WooCommerce Permalink Manager Pro (download).

2. Tiếp theo, click vào nút Allow & Continue. Các bạn cũng có thể click nút Skip để bỏ qua.

3. Giao diện thiết lập của plugin sẽ trông giống như thế này. Hãy lựa chọn dạng cấu trúc đường dẫn phù hợp với nhu cầu của bạn.

Trong đó:
- Use WooCommerce settings: sử dụng thiết lập permalink của WooCommerce. Thiết lập này các bạn có thể tùy biến tại Settings => Permalinks. Nó nằm ngay bên dưới phần thiết lập permalink của WordPress.
- Category slug: sử dụng đường dẫn danh mục sản phẩm kiểu
tenmien.com/ten-danh-muc-san-pham. - Product slug: sử dụng đường dẫn sản phẩm kiểu
tenmien.com/ten-san-pham. - Full category path: sử dụng đường dẫn danh mục sản phẩm kiểu
tenmien.com/ten-danh-muc-me/ten-danh-muc-con. - Product slug with primary category: sử dụng đường dẫn sản phẩm kiểu
tenmien.com/ten-danh-muc-san-pham/ten-san-pham. - Full product path: sử dụng đường dẫn sản phẩm kiểu
tenmien.com/ten-danh-muc-me/ten-danh-muc-con/ten-san-pham.
Tick vào các mục Use primary category và Add canonicals để tăng khả năng tương thích cho plugin. Cuối cùng, click vào nút Save Changes để lưu lại.
4. Xóa cache website (nếu bạn có sử dụng plugin tạo cache) và kiểm tra kết quả. Thật đơn giản phải không nào? Chúc các bạn thành công!
Bạn biết phương pháp khác đơn giản và hiệu quả hơn để loại bỏ chữ product, product-category ra khỏi đường dẫn của WooCommerce? Đừng quên chia sẻ nó với chúng tôi trong khung bình luận bên dưới.
Nếu bạn thích bài viết này, hãy theo dõi blog của tôi để thường xuyên cập nhật những bài viết hay nhất, mới nhất nhé. Cảm ơn rất nhiều. :)






Cho mình hỏi, trong trường hợp sử dụng plugin như trên bạn giới thiệu thì khi index vào webmaster tool có nhận diện link đã thay đổi hay không?
Vì hiện tại tôi sử dụng code để xóa đường dẫn thư mục xong khi index một số công cụ nó vẫn nhận đường dẫn có link thư mục?
Nó sẽ cập nhật dần dần thôi bạn. Redirect nên không phải lo nhé.
Em thấy nếu làm TMĐT thì một lúc nào đó cũng chạy Google Ads, mà Google Ads cho TMĐT thì thế nào cũng chạy dynamic, mà dymanic thì nên có cái khúc product hay san-pham sẽ dễ hơn cho người làm quảng cáo ấy chứ. Em nghĩ là nên sửa thành san-pham chứ không nên bỏ a Hiếu ạ :D
Là nhiều người thích bỏ thôi, chứ WooCommerce không khuyến khích bỏ vì dễ gây xung đột. :P
Bác Trung Hiếu cho hỏi dùng cái này có ảnh hưởng SEO không bác? vì web hoạt động rồi.
Không bạn nhé. Nó tự redirect từ link cũ sang link mới.
theo mình thì không nên sử dụng code để sửa vì dễ gây ra lỗi
dùng plugin thì dễ sử dụng hơn
là cá nhân mình thì sẽ ưu tiên sử dụng plugin
Hiện tại web của tớ sử dụng code để xóa link thư mục vẫn chưa thấy lỗi gì. Xong đôi khi vào link cũ nó vẫn nhận. Không biết plugin khi thêm vào có ảnh hưởng đến tốc độ web không?
Mình dùng code snippets trên đường dẫn thì mất rồi mà sao trên breadcrumbs vẫn còn nhỉ.
Cái này là code loại bỏ trong đường dẫn chứ có phải loại bỏ trong breadcrumb đâu bạn. Nội dung hiển thị trên breadcrumb được cấu hình thông qua theme hoặc các plugin hỗ trợ SEO như Yoast SEO mà.
Vậy muốn bỏ cả breadcrumbs phải sửa trong plugin/theme hả anh Hiếu
Mình nghĩ là chỉ còn cách tự code lại cái breadcrumbs thôi. Vì giải pháp ở trên chỉ là rewrite lại url chứ ko phải tận gốc vấn đề (đoán thế)
Mình mới bỏ được rồi, mình dùng them Jnews, cái breadcrumbs nó nằm trong plugins JNews – Breadcrumb đi kèm, mình vào trong code nó tìm chữ category rồi xóa nó đi là nó mất luôn
Mình thấy nó cũng không cần thiết nếu không phân tầng nhiều lớp
Sao phức tạp thể nhỉ @@ dù sao cũng cảm ơn ad :D
hay quá, đúng cái em cần, tks nhiều
Mình nghĩ rút gọn cũng tốt, đối với những trang web phân danh mục sâu thì nên rút ngắn để tối ưu seo. làm danh mục 2 tầng thì bỏ qua cũng k sao :D
Có cách nào loại bỏ rel=”noopener noreferrer” trên wordpress 5. không bạn!
Mình đã thử một số cách rồi mà không được?
Bỏ làm chi vậy bạn? Ảnh hưởng gì đến SEO đâu. Nó là 1 thẻ hỗ trợ bảo mật thôi mà. :P