去除WordPress网站链接中“category”的四种方法-阿里云开发者社区

开发者社区> 人工智能> 正文

去除WordPress网站链接中“category”的四种方法

简介: 四招教你去除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/”形式。

下载地址:WordPress官方下载作者milardovich博客下载

优点:安装简单,老少皆宜。无论是初建成的博客,还是正打算使用固定链接 /永久链接的博客,还是被搜索引擎收录良好的博客。用不着修改代码,升级之时没有顾虑。使用 301跳转,把原链接进行跳转。最大程度防止搜索引擎降权,防止原链接打不开。

不足:插件或许会造成空间负担。这里不说是缺点,就是因为,造成的“空间负担”微乎其微,不应该是缺点。比较在意的就不用,无所谓推荐使用。

WP No Category Base:作者iDope,是为去除固定链接中分类链接里的category而开发出来的一款wordpress插件,被下载近5万次。安装启用此插件后,对原来的分类地址做了301跳转,对SEO优化有好处,把降权风险降到最低。

下载地址:WordPress官方下载作者iDope博客下载

但是不得不说的是,wp使用插件过多,会导致网站加载缓慢。这是使用插件的方式解决问题的弊病。

二、使用代码去除“cotegory”

直接贴如下代码,将下面代码加到主题functions.php中?>前保存,回到后台固定链接设置点击“保存更改”两次。如果前台分类目录页面不能访问,就再固定链接设置更新下;回到目录页面就能看到链接中的category被去除了,访问原来带category链接也会跳转到新链接上。

  1. /*  
  2. *WordPress去除category
  3. */
  4. add_action( 'load-themes.php',  'no_category_base_refresh_rules');
  5. add_action('created_category', 'no_category_base_refresh_rules');
  6. add_action('edited_category', 'no_category_base_refresh_rules');
  7. add_action('delete_category', 'no_category_base_refresh_rules');
  8. function no_category_base_refresh_rules() {
  9.     global $wp_rewrite;
  10.     $wp_rewrite -> flush_rules();
  11. }
  12. // register_deactivation_hook(__FILE__, 'no_category_base_deactivate');   
  13. // function no_category_base_deactivate() {   
  14. //  remove_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');   
  15. //  // We don't want to insert our custom rules again   
  16. //  no_category_base_refresh_rules();   
  17. // }   
  18. // Remove category base   
  19. add_action('init', 'no_category_base_permastruct');
  20. function no_category_base_permastruct() {
  21.     global $wp_rewrite$wp_version;
  22.     if (version_compare($wp_version, '3.4', '<')) {
  23.         // For pre-3.4 support   
  24.         $wp_rewrite -> extra_permastructs['category'][0] = '%category%';
  25.     } else {
  26.         $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';
  27.     }
  28. }
  29. // Add our custom category rewrite rules   
  30. add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules');
  31. function no_category_base_rewrite_rules($category_rewrite) {
  32.     //var_dump($category_rewrite); // For Debugging   
  33.     $category_rewrite = array();
  34.     $categories = get_categories(array('hide_empty' => false));
  35.     foreach ($categories as $category) {
  36.         $category_nicename = $category -> slug;
  37.         if ($category -> parent == $category -> cat_ID)// recursive recursion   
  38.             $category -> parent = 0;
  39.         elseif ($category -> parent != 0)
  40.             $category_nicename = get_category_parents($category -> parent, false, '/', true) . $category_nicename;
  41.         $category_rewrite['(' . $category_nicename . ')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$'] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
  42.         $category_rewrite['(' . $category_nicename . ')/page/?([0-9]{1,})/?$'] = 'index.php?category_name=$matches[1]&paged=$matches[2]';
  43.         $category_rewrite['(' . $category_nicename . ')/?$'] = 'index.php?category_name=$matches[1]';
  44.     }
  45.     // Redirect support from Old Category Base   
  46.     global $wp_rewrite;
  47.     $old_category_base = get_option('category_base') ? get_option('category_base') : 'category';
  48.     $old_category_base = trim($old_category_base, '/');
  49.     $category_rewrite[$old_category_base . '/(.*)$'] = 'index.php?category_redirect=$matches[1]';
  50.     //var_dump($category_rewrite); // For Debugging   
  51.     return $category_rewrite;
  52. }
  53. // Add 'category_redirect' query variable   
  54. add_filter('query_vars', 'no_category_base_query_vars');
  55. function no_category_base_query_vars($public_query_vars) {
  56.     $public_query_vars[] = 'category_redirect';
  57.     return $public_query_vars;
  58. }
  59. // Redirect if 'category_redirect' is set   
  60. add_filter('request', 'no_category_base_request');
  61. function no_category_base_request($query_vars) {
  62.     //print_r($query_vars); // For Debugging   
  63.     if (isset($query_vars['category_redirect'])) {
  64.         $catlink = trailingslashit(get_option('home')) . user_trailingslashit($query_vars['category_redirect'], 'category');
  65.         status_header(301);
  66.         header("Location: $catlink");
  67.         exit();
  68.     }
  69.     return $query_vars;
  70. }

三、修改函数

1、找到你Wordpress博客wp-includes文件夹下的category-template.php。

2、打开此文件,搜索(get_category_link()函数里)的以下代码:

$catlink = $wp_rewrite->get_category_permastruct();

在其后,另起一行加入:

$catlink = str_replace('/category' , '' , $catlink);
代码作用是,使用字符串替换函数,把获取分类链接函数的分类链接里的/category替换掉。达到去掉分类链接前缀/category的目的。

3、保存上传到服务器即可。

四、修改固定链接,去掉分类链接前缀category

去除WordPress网站链接中category的四种方法

登录你的Wordpress后台,打开固定链接/永久链接设置项。在“可选设置”里的“分类地址前缀”里输入半角字符: “.”;保存即可去掉分类前缀category。

优点:设置简单,老少皆宜。适用于初建成的博客,或刚打算使用固定链接 /永久链接的博客。用不着修改代码,升级之时没有顾虑;用不着插件,不会增加运行负担。

缺点:原链接无法打开,出现404错误。被搜索引擎收录良好,或分类链接有较多外链链入的博客,可要万分小心了。不要因为操作简单、省时省力而损失了大量外链及权重。

开启重写后,这样设置会导致分类和标签下找不到对应文章,所以最好还是只将其缩短。

 

以上四类方式均可以有效去除url中的“category”,各位站长可根据自己的实际情况来选择去除方式。若还有其他有效方式,请在评论区留言交流。

更多文章,请访问:mus18.com

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章