使用WordPress建站的站长都会遇到,分类链接中都会无缘无故多出一个域名 /category/xx.htmlurl,这对于网站的SEO来说是非常不利的,同时对网站的链接结构也很不美观。网上有很多如何去掉category的教程,这里全百科网简单总结分享一下,并对比一下优缺点,仅供参考。
方法一
修改固定链接设置,去掉分类链接前缀category
登录你的Wordpress后台,打开固定链接/永久链接设置项。在“可选设置”里的“分类地址前缀”里输入半角字符: “.”;保存即可去掉分类前缀category。
优点:设置简单,老少皆宜。适用于初建成的博客,或刚打算使用固定链接 /永久链接的博客。用不着修改代码,升级之时没有顾虑;用不着插件,不会增加运行负担。
缺点:原链接无法打开,出现404错误。被搜索引擎收录良好,或分类链接有较多外链链入的博客,可要万分小心了。不要因为操作简单、省时省力而损失了大量外链及权重。
开启重写后,这样设置会导致分类和标签下找不到对应文章,所以最好还是只将其缩短。
方法二
使用插件:No Category Base (WPML)
优点:安装简单,安装启用后自动生效。无论是初建成的博客,还是被搜索引擎收录良好的博客都可以使用。它对原来的分类地址做了301跳转,对SEO优化有好处,把降权风险降到最低,防止原链接打不开。用不着修改代码,升级没有顾虑。
不足:插件可能会造成服务器负担,但是微乎其微,不应该算缺点。
方法三
添加代码到functions.php文件
//作者:王子驿站 //网站:http://94wz.top/ //去除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 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; }
优点:加入代码,性能影响忽略不计,适用于对代码稍熟悉的博客。
缺点:博客升级需要重新修改。
方法四
修改Wordpress函数,去掉分类前缀category
对于 wordpress 中的各类问题,几乎都能找到插件解决,这个问题也不例外。但是很大一部分 wper 患有严重的代码控,但凡修改代码可以达到的效果绝不用插件代替,即便后者更为简单。所以在这里介绍一个非插件的方法:
1、Wordpress3.2之前版本
在目录 wp-includes/category-template.php 文件中搜索:
$catlink = $wp_rewrite->get_category_permastruct();
在下面添加:
$catlink = str_replace('/category', "", $catlink);
保存即可。
2、Wordpress3.2版本
在目录 wp-includes/category-template.php 文件中搜索:
function get_category_link( $category )
在最后的
return $category;
之前加入
$category = str_replace('/category', "", $category);
优点:仅加入一段代码,性能影响忽略不计。适用于对代码稍熟悉的博客。
缺点:修改代码,博客升级还要修改。且原地址仍可以访问。或会造成谷歌网站管理员工具里提到的,重复的标题。
评论0