天天看點

去除WordPress網站連結中“category”的四種方法

作為wordpress的重度使用者,對于wordpress網站的每一個細節我都很在意。

相信很多站長和我一樣!

網站搭建起來,我發現url中一直有一個“category”,我表示很不爽,想盡辦法要把這個萬惡的單詞給去掉。結合網友們分享的教程和個人總結,去掉“category”的方法無非就是使用插件、代碼實作、修改函數、修改固定連結方式四種有效方法。

去除WordPress網站連結中“category”的四種方法

一、使用插件

如果你是傻瓜式建站,沒有一定的代碼基礎,又很介意url中的“category”的話,建議使用插件,直接在wp背景搜尋插件安裝就可以!然後重新整理網站就會發現url中的“category”已經被順利去除。

推薦兩款插件:

no category parents:作者milardovich,上面插件的更新版,不僅能去掉分類連結的字首category,還能去掉父分類 parent-category。例如能把“/category/parent-category/my-category/”換成“/my-category/”形式。

優點:安裝簡單,老少皆宜。無論是初建成的部落格,還是正打算使用固定連結 /永久連結的部落格,還是被搜尋引擎收錄良好的部落格。用不着修改代碼,更新之時沒有顧慮。使用 301跳轉,把原連結進行跳轉。最大程度防止搜尋引擎降級,防止原連結打不開。

不足:插件或許會造成空間負擔。這裡不說是缺點,就是因為,造成的“空間負擔”微乎其微,不應該是缺點。比較在意的就不用,無所謂推薦使用。

wp no category base:作者idope,是為去除固定連結中分類連結裡的category而開發出來的一款wordpress插件,被下載下傳近5萬次。安裝啟用此插件後,對原來的分類位址做了301跳轉,對seo優化有好處,把降級風險降到最低。

但是不得不說的是,wp使用插件過多,會導緻網站加載緩慢。這是使用插件的方式解決問題的弊病。

二、使用代碼去除“cotegory”

直接貼如下代碼,将下面代碼加到主題functions.php中?>前儲存,回到背景固定連結設定點選“儲存更改”兩次。如果前台分類目錄頁面不能通路,就再固定連結設定更新下;回到目錄頁面就能看到連結中的category被去除了,通路原來帶category連結也會跳轉到新連結上。

/*  

*wordpress去除category

*/

add_action( 'load-themes.php',  'no_category_base_refresh_rules');

add_action('created_category', 'no_category_base_refresh_rules');

add_action('edited_category', 'no_category_base_refresh_rules');

add_action('delete_category', 'no_category_base_refresh_rules');

function no_category_base_refresh_rules() {

    global $wp_rewrite;

    $wp_rewrite -> flush_rules();

}

// register_deactivation_hook(__file__, 'no_category_base_deactivate');   

// function no_category_base_deactivate() {   

//  remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');   

//  // we don't want to insert our custom rules again   

//  no_category_base_refresh_rules();   

// }   

// remove category base   

add_action('init', 'no_category_base_permastruct');

function no_category_base_permastruct() {

    global $wp_rewrite, $wp_version;

    if (version_compare($wp_version, '3.4', '<')) {

        // for pre-3.4 support   

        $wp_rewrite -> extra_permastructs['category'][0] = '%category%';

    } else {

        $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';

    }

// add our custom category rewrite rules   

add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');

function no_category_base_rewrite_rules($category_rewrite) {

    //var_dump($category_rewrite); // for debugging   

    $category_rewrite = array();

    $categories = get_categories(array('hide_empty' => false));

    foreach ($categories as $category) {

        $category_nicename = $category -> slug;

        if ($category -> parent == $category -> cat_id)// recursive recursion   

            $category -> parent = 0;

        elseif ($category -> parent != 0)

            $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;

// add 'category_redirect' query variable   

add_filter('query_vars', 'no_category_base_query_vars');

function no_category_base_query_vars($public_query_vars) {

    $public_query_vars[] = 'category_redirect';

    return $public_query_vars;

// redirect if 'category_redirect' is set   

add_filter('request', 'no_category_base_request');

function no_category_base_request($query_vars) {

    //print_r($query_vars); // for debugging   

    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;

三、修改函數

1、找到你wordpress部落格wp-includes檔案夾下的category-template.php。

2、打開此檔案,搜尋(get_category_link()函數裡)的以下代碼:

在其後,另起一行加入:

3、儲存上傳到伺服器即可。

四、修改固定連結,去掉分類連結字首category

去除WordPress網站連結中“category”的四種方法

登入你的wordpress背景,打開固定連結/永久連結設定項。在“可選設定”裡的“分類位址字首”裡輸入半角字元: “.”;儲存即可去掉分類字首category。

優點:設定簡單,老少皆宜。适用于初建成的部落格,或剛打算使用固定連結 /永久連結的部落格。用不着修改代碼,更新之時沒有顧慮;用不着插件,不會增加運作負擔。

缺點:原連結無法打開,出現404錯誤。被搜尋引擎收錄良好,或分類連結有較多外鍊鍊入的部落格,可要萬分小心了。不要因為操作簡單、省時省力而損失了大量外鍊及權重。

開啟重寫後,這樣設定會導緻分類和标簽下找不到對應文章,是以最好還是隻将其縮短。

以上四類方式均可以有效去除url中的“category”,各位站長可根據自己的實際情況來選擇去除方式。若還有其他有效方式,請在評論區留言交流。