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


Nhằm tối ưu SEO OnPage cho website/blog sử dụng WordPress CMS, thì chúng ta nên xóa /category/ trên đường dẫn URL. Việc này sẽ giúp đường dẫn URL của bạn ngắn hơn, sạch hơn và tối ưu SEO hơn. Sau đây là 1 số phương án giúp các bạn làm xử lý loại bỏ /category/ mà mình tham khảo được.

1. Sử dụng các Plugin

1.1. Sử dụng Yoast SEO plugin

Yoast SEO là một WordPress Plugin nối tiếng được sử dụng phổ biến trong các Website/Blog sử dụng WordPress. Nó có hỗ trợ xóa /category/ một cách dễ dàng với 1 option ở trang quản trị. Nếu chúng ta đang sử dụng plugin này thì nên tận dụng chức năng của nó thay vì cài cắm các plugin khác hay thêm nếm code vào.

Cách xóa /category/ sử dụng Yoast SEO chúng ta thực hiện như sau:

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.

1.2. Sử dụng No Category Base (WPML) Plugin

Nếu không sử dụng Yoast SEO plugin, thì có 1 plugin khác giúp xóa category 1 cách dễ dàng chỉ với việc kích hoạt plugin lên. Đó là plugin No Category Base (WPML).

Các bạn có thể kích hoạt plugin này bằng cách truy cập mục [ Plugins ] => [ Add new ] => Tìm kiếm với từ khóa “No Category Base” => Bấm [ Install Now ]

Ngoài ra có thể download trực tiếp plugin này tại đây: https://wordpress.org/plugins/no-category-base-wpml/ , giải nén và upload tới thư mục wp-content/plugins => Vào trang quản trị để kích hoạt plugin lên.

2. Sử dụng code để xóa /category/

Thêm đoạn code sau vào file functions.php

/* 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;
}

Nếu trường hợp code trên không hoạt động thì có thể do WordPress đang cache đang cache cấu trúc đường dẫn, chúng ta cần vào [ Settings ] => [ Permalinks ] => bấm [ Save changes ] để cập nhật lại cấu trúc đường dẫn.

Nguồn: vinasupport.com

             
SHARE

Bài viết liên quan

Có 1 bình luận trong bài viết “Xóa chữ category trên đường dẫn URL của WordPress”

  1. Trước mới học làm WordPress cũng khá loay hoay về cái này. Sau tìm được bài viết này mình đã remove thành công. Rất cảm ơn bạn đã chia sẻ.

mode_edit Bình luận của bạn

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

account_circle
web