導讀:其實網上很多去掉分類標誌的方法,比如固定連結前加一個小點.,亦或者是修改 WordPress 原程式檔案的方法,感覺最好用的就是使用外掛:no-cat...
其實網上很多去掉分類標誌的方法,比如固定連結前加一個小點 「.」,亦或者是修改 WordPress 原程式檔案的方法,感覺最好用的就是使用外掛:no-category-base,使用改外掛,不僅能將 category 標誌去掉,而且訪問之前帶 category 的分類目錄還有做 301 跳轉,這非常利於 SEO 。不管怎麼說,如果你能看到這篇文章,那麼就是隻想實現這個功能,並且不想用外掛,引用奶嘴大大的一句話,我相信大家看完就能明白:
其實在 WordPress 裡,不管你有沒有啟用外掛和主題,只要你把它們上傳 WordPress 裡了,WordPress 就會在後他把那些外掛和主題的資訊讀取出來再顯示。那麼這樣的話 WordPress 每讀取一個外掛的資訊就要歷遍一次檔案 (PS:因為 WordPress 外掛沒有固定的資訊存放檔案,只要外掛作者高興,外掛目錄下的任意一個 php 檔案都是可以的。所以 WordPress 只能透過歷遍檔案來讀取資訊。),而主題資訊呢?都在 style.css 裡,也就是說每個主題存在於伺服器上的主題 WordPress 都會把他們的 style.css 讀取一遍,那麼數量多的話 WordPress 的速度也就慢下來了,所以小 V 建議主題和外掛能不用的都不用並且刪除掉。外掛能整合到主題的儘量整合到主題,因為這樣就可以減少 WordPress 歷遍檔案的次數了。
如果你認真看完了上面一篇文章,你就能明白,為何會有這篇文章了,哈哈。廢話不多說,我們的目的就是移植外掛 no-category-base 到主題的 functions.php 中。
如何移植外掛?
恩,這是個問題,如果你也是隻是想得到結果的伸手黨,好吧,跳轉到文章最後面複製程式碼貼上到你的 functions.php 中就可以了,接下來說說外掛移植到 functions.php 中的注意事項,注意,因為本人也是 wp 折騰菜鳥,所有有錯的地方,望大神指出來:
其實最主要的就是這個 register_activation_hook, 這個是外掛註冊的時候啟用,所以直接丟到 functions.php 裡肯定會出錯,丟到主題中,我們就將此處修改為主題啟用的時候啟用,那麼相應的就為 load-themes.php,好了重點完了。接下來直接看程式碼,我相信大家就會明白了。

去除分類標準 category 程式碼版
註釋的地方就是外掛停用的時候移出偽靜態規則,這裡我們不需要他,因為主題未啟用就相當於沒有啟用這個偽靜態規則,語文不好,表述不清。你懂得。將下面的程式碼複製到你主題的 functions.php 中即可去掉分類標誌:
/*
*去除分類標誌程式碼, 來自 WordPress 主題
*/
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
global $wp_rewrite;
$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]';
//var_dump($category_rewrite); // For Debugging
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;
}