Bỏ slug product-category trong WooCommerce
Mấy lần tôi đọc từ slug nhưng cũng không để ý đến nghĩa tiếng việt là gì. Chỉ hiểu nôm na trong wordpress khi ta bật tính năng permanent link thì khi ta tiêu đề một bài viết dạng “làm sao để bỏ slug product-category trong WooCommerce” thì nó sẽ chuyển thành dạng “lam-sao-de-bo-slug-product-category-trong-woocommerce”. Tìm hiểu thêm thì tôi thấy người ta định nghĩa slug trong tiếng anh là như thế này “Slug: the part of an URL which identifies a page using human-readable keywords” có nghĩa là nó là một địa chỉ định danh một trang sử dụng những từ khóa mà con người có thể đọc được. Đọc xong không hiểu thêm là mấy :D. Có ai đó giải thích slug bằng tiếng việt như thế này “Slug có dạng một dãy chữ thường được nối với nhau bởi dấu gạch ngang (-) và không chứa ký tự đặc biệt” thấy cũng đúng đúng :)
Tôi có một website buôn bán nhỏ sử dụng nền tảng wordpress và woocommerce. Khi tạo một danh mục sản phẩm (product-category) thì nó luôn hiển thị product-category trước danh mục đó. Dạng như sau:
http://nguyenhoangonline.com/product-category/nam-linh-chi-nam-lim-xanh
Tôi muốn bỏ “product-category” trên đường dẫn trên khi nhấp vào một danh mục sản phẩm, kết quả mong muốn như sau:
http://nguyenhoangonline.com/nam-linh-chi-nam-lim-xanh
Kết quả tôi mong muốn là tốt hơn cho SEO nên tôi đi tìm mã php hoặc Plugin nào đó có chức năng như vậy.
<?php
/*
Plugin Name: Remove product-category slug
Plugin URI: https://timersys.com/
Description: Check if url slug matches a woocommerce product category and use it instead
Version: 0.1
Author: Timersys
License: GPLv2 or later
*/
add_filter('request', function( $vars ) {
global $wpdb;
if( ! empty( $vars['pagename'] ) || ! empty( $vars['category_name'] ) || ! empty( $vars['name'] ) || ! empty( $vars['attachment'] ) ) {
$slug = ! empty( $vars['pagename'] ) ? $vars['pagename'] : ( ! empty( $vars['name'] ) ? $vars['name'] : ( !empty( $vars['category_name'] ) ? $vars['category_name'] : $vars['attachment'] ) );
$exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s" ,array( $slug )));
if( $exists ){
$old_vars = $vars;
$vars = array('product_cat' => $slug );
if ( !empty( $old_vars['paged'] ) || !empty( $old_vars['page'] ) )
$vars['paged'] = ! empty( $old_vars['paged'] ) ? $old_vars['paged'] : $old_vars['page'];
if ( !empty( $old_vars['orderby'] ) )
$vars['orderby'] = $old_vars['orderby'];
if ( !empty( $old_vars['order'] ) )
$vars['order'] = $old_vars['order'];
}
}
return $vars;
});