2 Cách Xóa category trên đường dẫn URL của WordPress

0 550

Mặc định trong wordpress luôn có chữ category trên đường dẫn URL (ví dụ: chunghic.com/category/blog). Về cơ  bản điều này không ảnh hưởng đến SEO nhiều, có chăng đường dẫn chỉ dài hơn 1 chút, tuy nhiên nhiều người loại bỏ chữ này trên URL, điều này trông website trở nên chuyên nghiệp hơn, URL ngắn gọn hơn. Hôm nay Chunghic.com sẽ giúp các bạn loại bỏ chữ category trên URL wordpress với 2 cách thông thường như sau:

Cách 1: Sử dụng Plugin

Hiện nay có 2 plugin tốt nhất để hỗ trợ loại bỏ category trên đường dẫn wordpress đó là Plugin Yoast SEO  Plugin No Category Base (WPML). Ở bài viết này mình sẽ hướng dẫn các bạn sử dụng Plugin Yoast SEO do đây là một Plugin hỗ trợ SEO, giúp tối ưu hóa SEO rất tốt mà hầu hết các trang web sử dụng wordpress đều dùng Plugin này.

Bước 1. Cài đặt & Kích hoạt

Ở màn hình Dashboard WordPress của bạn, tìm đến Plugins -> Add New -> gõ vào mục Search tên Plugin là Yoast SEO ->Chọn Yoast SEO do tác giả Team Yoast và kích chọn Install

Sau khi cài đặt xong chúng ta  chon activave kích hoạt nó. Và chúng ta thấy biểu tượng của Plugin này như sau.

Plugin Yoast SEO 2

Như vậy chúng ta đã cài đặt xong và chuyển sang bước tiếp theo là cấu hình Plugin này.

Lúc này Menu quản trị xuất hiện thêm một menu đó là “SEO”  Tiếp theo Từ trang quản trị của WordPress => [ SEO ] => [ Search Appearance ] => [ Taxonomies ] => [ Category URLs ] => Chuyển sang Remove và bấm [ Save changes ] để lưu lại thay đổi.

Cách 2: Sử dụng Code mà không cần Plugin

Bạn chỉ cần thêm đoạn code sau vào file functions.php là xong

/* actions */
add_action( 'created_category', 'remove_category_url_refresh_rules' );
add_action( 'delete_category', 'remove_category_url_refresh_rules' );
add_action( 'edited_category', 'remove_category_url_refresh_rules' );
add_action( 'init', 'remove_category_url_permastruct' );
/* filters */
add_filter( 'category_rewrite_rules', 'remove_category_url_rewrite_rules' );
add_filter( 'query_vars', 'remove_category_url_query_vars' );    // Adds 'category_redirect' query variable
add_filter( 'request', 'remove_category_url_request' );       // Redirects if 'category_redirect' is set
function remove_category_url_refresh_rules() {
    global $wp_rewrite;
    $wp_rewrite->flush_rules();
}
function remove_category_url_deactivate() {
    remove_filter( 'category_rewrite_rules',
        'remove_category_url_rewrite_rules' ); // We don't want to insert our custom rules again
    remove_category_url_refresh_rules();
}
/**
 * Removes category base.
 *
 * @return void
 */
function remove_category_url_permastruct() {
    global $wp_rewrite, $wp_version;
    if ( 3.4 <= $wp_version ) {
        $wp_rewrite->extra_permastructs['category']['struct'] = '%category%';
    } else {
        $wp_rewrite->extra_permastructs['category'][0] = '%category%';
    }
}
/**
 * Adds our custom category rewrite rules.
 *
 * @param  array $category_rewrite Category rewrite rules.
 *
 * @return array
 */
function remove_category_url_rewrite_rules( $category_rewrite ) {
    global $wp_rewrite;
    $category_rewrite = array();
    /* WPML is present: temporary disable terms_clauses filter to get all categories for rewrite */
    if ( class_exists( 'Sitepress' ) ) {
        global $sitepress;
        remove_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ) );
        $categories = get_categories( array( 'hide_empty' => false, '_icl_show_all_langs' => true ) );
        add_filter( 'terms_clauses', array( $sitepress, 'terms_clauses' ) );
    } else {
        $categories = get_categories( array( 'hide_empty' => false ) );
    }
    foreach ( $categories as $category ) {
        $category_nicename = $category->slug;
        if ( $category->parent == $category->cat_ID ) {
            $category->parent = 0;
        } elseif ( 0 != $category->parent ) {
            $category_nicename = get_category_parents( $category->parent, false, '/', true ) . $category_nicename;
        }
        $category_rewrite[ '(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
        $category_rewrite[ '(' . $category_nicename . ')/page/?([0-9]{1,})/?$' ]                  = 'index.php?category_name=$matches[1]&paged=$matches[2]';
        $category_rewrite[ '(' . $category_nicename . ')/?$' ]                                    = 'index.php?category_name=$matches[1]';
    }
    // Redirect support from Old Category Base
    $old_category_base                                 = get_option( 'category_base' ) ? get_option( 'category_base' ) : 'category';
    $old_category_base                                 = trim( $old_category_base, '/' );
    $category_rewrite[ $old_category_base . '/(.*)$' ] = 'index.php?category_redirect=$matches[1]';
    return $category_rewrite;
}
function remove_category_url_query_vars( $public_query_vars ) {
    $public_query_vars[] = 'category_redirect';
    return $public_query_vars;
}
/**
 * Handles category redirects.
 *
 * @param $query_vars Current query vars.
 *
 * @return array $query_vars, or void if category_redirect is present.
 */
function remove_category_url_request( $query_vars ) {
    if ( isset( $query_vars['category_redirect'] ) ) {
        $catlink = trailingslashit( get_option( 'home' ) ) . user_trailingslashit( $query_vars['category_redirect'],
                'category' );
        status_header( 301 );
        header( "Location: $catlink" );
        exit;
    }
    return $query_vars;
}

Đoạn code trên mình đã sử dụng cho nhiều website. Trong trường hợp bạn chèn code vào bị lỗi rất có thể do sai cấu chúc đường dẫn, lúc này bạn vào  [ Settings ] => [ Permalinks ] => bấm [ Save changes ] để cập nhật lại cấu trúc đường dẫn.