WordPress去除URL中/category/的方法汇总

WordPress默认文章分类路径是自带 /category/目录的,而文章详情页面并没有带 /category/。很多有技术洁癖的用户就非常希望把分类目录URL中的/category/去掉。这里,我们WPPOP为大家提供了几种常用的方法,我们可以使用第三方插件或者添加代码的方法来实现去掉URL中的/category/的目的。

WordPress应用开发

其实,对于搜索优化要求来说,网站URL路径越简洁、越简短越好,理论上说搜索引擎认为 http://www.domain.com/category/cat-name 的权重不如 http://www.domain.com/category/cat-name 的权重高,搜索蜘蛛访问的时候抓取后者速度要更快,所以去除URL中的/category/的也是有道理的。实际上,随着近年来搜索引擎技术的不断发展进化,只要你的网页路径保持个3~4层级,一般对应搜索蜘蛛抓取都没有影响的。当然,在首选遵循URL路径越简洁、越简短越好的规则,我们认为去掉URL中的/category/的效果会更好。

方法1:No Category Base (WPML) – WordPress插件

No Category Base (WPML) 是一款帮助您完全强制性删除URL中/category/的插件(例如,’mysite.com/category/cat-name/’ 去掉后是 ‘mysite.com/cat-name/’)。该插件不需要设置或修改WordPress核心文件,也不会破坏任何链接。它还会将您的旧类别链接重定向到新类别链接。

插件特色:

  1. 更好更合理的永久链接,’mysite.com/category/cat-name/’ 去掉后是 ‘mysite.com/cat-name/’;
  2. 简单的插件 – 几乎不增加任何开销;
  3. 启用即可,无需额外设置;
  4. 无需修改WordPress文件;
  5. 不需要其他插件配合工作;
  6. 与站点地图插件兼容;
  7. 兼容WPML;
  8. 适用于多个子类别;
  9. 适用于WordPress Multisite 多站点;
  10. 将旧类别永久链接重定向到新类别(301重定向,适用于SEO)。

此外,类似插件还有 Remove Category URL 和 FV Top Level Categories。使用插件的好处就是都不需要额外的设置和代码修改;只要安装启用插件就可以实现去掉URL中/category/的目的了。

方法2:永久链接中删除/category/

1. 在网站后台找到  设置 > 固定连接(Settings > Permalinks) 设置页面,如下图所示:

WordPress移除Category

2. 在 自定义结构(Custom Structure)项,设置固定连接结构为: /%category%/%postname%/

3. 接下来,在 分类目录前缀(Category base)项设置为 . (英文句号);

4. 保存后即可生效。

方法3:在 .htaccess 中添加指令删除/category/

在你的网站根目录找到 .htaccess 文件,并在里面添加一行代码:

RewriteRule ^category/(.+)$ https://www.wppop.com/$1 [R=301,L]

提示:修改里面的 https://www.wppop.com/ 为你的域名即可。

方法4:添加代码到主题的 functions.php 文件

添加下面的代码到当前使用的主题 functions.php 文件中:

// 去除 category 代码
if( _hui(‘no_categoty’) && !function_exists(‘no_category_base_refresh_rules’) ){
register_activation_hook(__FILE__, ‘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();
}
// 移除 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;
}
// For Debugging
//add_filter(‘rewrite_rules_array’, ‘no_category_base_rewrite_rules_array’);
//function no_category_base_rewrite_rules_array($category_rewrite) {
// var_dump($category_rewrite); // For Debugging
//}
// 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;
}
}

添加以上代码后就可以自动去除URL中的 /category/目录了,这段代码内容其实就是 WP No category Base 插件的主要代码,所以不安装这个插件,添加该代码段到主题文件中一样可以解决这个问题。

方法5:Yoast SEO 插件

Yoast SEO 插件是一款WordPress搜索优化插件,是 WordPress建站中用户最多的WordPress SEO搜索优化插件。

如果您的网站使用了这款插件,那么在插件 搜索外观 > 分类法 > 分类目录类目网址 项下面的 移除分类前缀 中就可以设置去掉URL中的 /category/;(英文对应路径为 Search Appearance > Taxonomies > Category URLs 项下面的Remove the categories prefix)。

WordPress移除Category方法

重要提醒

如果在以上各方法设置,网站访问可能会出现 404 错误页面,解决办法也很简单,只要登录后台,在 设置 > 固定链接(Settings > Permalinks) 设置页面,把固定链接格式改成最上面 朴素(Plain),保存设置后,再改回自己的常用格式,再保存一下就可以解决这个bug了。

如果在具体操作中有任何疑问,请随时添加评论提交您的反馈,我们会尽快回复您。

在线留言

您的昵称 *

您的邮箱 *

您的网站

评论内容 *

专业的外贸企业建站优化服务商

助力企业开启国际化外贸建站营销推广新模式

帮助企业轻松获取高质量全球客户询盘和订单

查看模板 在线咨询
100+ 外贸建站模板
7X24 售后服务保障
19000+ 外贸会员用户
99.9% 用户好评率
0 去购物车结算
QQ在线客服
025-84234440
帮助中心
返回顶部