Nhảy đến nội dung

[Thủ Thuật WordPress] Xóa produc-catelogy và product trong đường dẫn WooCommerce

Nội Dung Bài Viết

Dưới đây là hướng dẫn xóa /produc-catelogy/ và /product/ trong đường dẫn WooCommerce an toàn và dễ dàng mà không cần sử dụng bất kỳ plugin nào.

Phương pháp này phù hợp với các Website mới cài đặt WooCommerce vì sẽ trách bị lỗi với các plugin đang sử dụng.

Bước 1 - Cài đặt Đường dẫn tĩnh - Permalinks 

Bạn vào Setting Permalinks  và tại vị trí 'Product category base' thay đó bằng dấu chấm '.'

Image
Xóa produc-catelogy và product trong đường dẫn WooCommerce

Bước 2 - Thêm đoạn Snippet xóa /produc-catelogy/ và /product/

2.1. Thêm đoạn code bên dưới vào file functions.php của child theme

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;
});

2.2. Sử dụng filter để remove /product/ từ URL của trang.

function na_remove_slug($post_link, $post, $leavename)
{

    if ('product' != $post->post_type || 'publish' != $post->post_status) {

        return $post_link;
    }

    $post_link = str_replace('/product/', '/', $post_link);

    return $post_link;
}

add_filter('post_type_link', 'na_remove_slug', 10, 3);

function change_slug_struct($query)
{

    if (!$query->is_main_query() || 2 != count($query->query) || !isset($query->query['page'])) {

        return;
    }

    if (!empty($query->query['name'])) {

        $query->set('post_type', array('post', 'product', 'page'));
    } elseif (!empty($query->query['pagename']) && false === strpos($query->query['pagename'], '/')) {

        $query->set('post_type', array('post', 'product', 'page'));

        // We also need to set the name query var since redirect_guess_404_permalink() relies on it.

        $query->set('name', $query->query['pagename']);
    }
}

add_action('pre_get_posts', 'change_slug_struct', 99);

Chú ý: 

+ Các URL product của WooCommerce hiện đang có thể bị lỗi 404, vậy nên hãy đảm bảo luôn chuyển hướng này về 301.

+ Cách này dễ bị gặp lỗi với phần phân trang và các bộ lọc tùy chỉnh của bạn. Hãy cân nhắc trước khi sử dụng.

+ Nếu bạn không rành về lập trình có thể sử dụng Plugin "Custom Permalinks for WooCommerce".