前言
在日常使用Wordpress搭建网站时,发现文章或者分类页的URL地址中默认带有Category,URL层级过长会影响我们网站SEO的优化,也不利于用户体验。这里讲一下如何去除URL中categpory的方法。
操作
- 第一步先登录到WordPress后台,然后依次点击“设置—>固定链接”选项;
- 接下来在“可选”选项下的“分类目录前缀”后面的文字框中填写一个英文的点号“.”,然后保存更改,这个样网址中的category就去掉了。
这样保存设置后就可以了,有兴趣的朋友可以自己测试看看。
404错误
- 另外如果你修改后原文章的链接无法打开,出现404错误,可能是与你做的固定链接设置中常用设置有关,如果出现这个情况只需要在自定义结构里面加上“
/%category%
”。
- 这里的
.html
是将wordpress设置伪静态URL后还收录动态的URL,可以按需添加。 - 需要注意的是这里的/%category%和URL里的category是不一样的。
其他方法
一、使用插件
如果你是傻瓜式建站,没有一定的代码基础,又很介意url中的“category”的话,建议使用插件,直接在wp后台搜索插件安装就可以!然后刷新网站就会发现url中的“category”已经被顺利去除。
推荐两款插件:
No category parents:作者milardovich,上面插件的升级版,不仅能去掉分类链接的前缀category,还能去掉父分类 parent-category。例如能把“/category/parent-category/my-category/”换成“/my-category/”形式。
下载地址:WordPress官方下载;作者milardovich博客下载
优点:安装简单,老少皆宜。无论是初建成的博客,还是正打算使用固定链接 /永久链接的博客,还是被搜索引擎收录良好的博客。用不着修改代码,升级之时没有顾虑。使用 301跳转,把原链接进行跳转。最大程度防止搜索引擎降权,防止原链接打不开。
不足:插件或许会造成空间负担。这里不说是缺点,就是因为,造成的“空间负担”微乎其微,不应该是缺点。比较在意的就不用,无所谓推荐使用。
WP No Category Base:作者iDope,是为去除固定链接中分类链接里的category而开发出来的一款wordpress插件,被下载近5万次。安装启用此插件后,对原来的分类地址做了301跳转,对SEO优化有好处,把降权风险降到最低。
下载地址:WordPress官方下载;作者iDope博客下载
但是不得不说的是,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
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;
}
三、修改函数
1、找到你Wordpress博客wp-includes文件夹下的category-template.php。
2、打开此文件,搜索(get_category_link()函数里)的以下代码:
$catlink = $wp_rewrite->get_category_permastruct();
在其后,另起一行加入:
$catlink = str_replace('/category' , '' , $catlink);
- 代码作用是,使用字符串替换函数,把获取分类链接函数的分类链接里的/category替换掉。达到去掉分类链接前缀
/category
的目的。