不少折腾 WordPress 的朋友都希望去掉分类链接中默认就添加的 /category/ 目录标志,网上很多这方面的教程,据子凡目前所知,应该有三种方法可以去除分类 category 标志,这里子凡依然把所有的方法列举出来,但是子凡还是比较推荐使用以下推荐的代码或插件来实现效果,其它方法虽然可以达到效果,但都是不太完美的。泪雪建站和泪雪博客等网站目前也都是选择去掉了/category/目录,使用的正是方法二和方法三。
方法一(不推荐使用):
进入 WordPress 后台 -> 设置 -> 固定链接:
如上图所示,就是在将“分类目录前缀”项设置为“.”,这种方法也可以去除 category,虽然设置简单,但是效果不理想,容易出现错误。
方法二(推荐):
这里子凡推荐一个比较完善的插件(WP No Category Base)来去除 category。
WP No Category Base 插件功能简单,就是仅仅为了去除 /category/ 目录标志,直接安装,不需要任何设置就可以使用。
WP No Category Base 插件下载
官方下载 | 百度云网盘备用下载(v1.1.1) | 推荐后台直接搜索安装
方法三(代码版,需要折腾代码):
其实第三种方法适合于喜欢折腾的朋友,特别是不喜欢用插件的朋友,这里的代码其实就是 WP No Category Base 插件,直接将一下插件代码复制到当前主题 Functions.php 中即可:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | /* Plugin Name: WP No Category Base Plugin URI: http://blinger.org/wordpress-plugins/no-category-base/ Description: Removes '/category' from your category permalinks. Version: 1.1.1 Author: iDope Author URI: http://efextra.com/ */ // Refresh rules on activation/deactivation/category changes 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(); } // 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' = '%category%'; } else { $wp_rewrite -> extra_permastructs'category' = '%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=$matches1&feed=$matches2'; $category_rewrite['(' . $category_nicename . ')/page/?(0-9{1,})/?$'] = 'index.php?category_name=$matches1&paged=$matches2'; $category_rewrite'(' . $category_nicename . ')/?$' = 'index.php?category_name=$matches1'; } // 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=$matches1'; //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; } |
---|
泪雪提示:如果你的是新站,可以考虑去除/category/目录;如果你的是老站(也就是说搜索引擎已经收录了分类目录),使用这个插件后,注意做一下分类链接的 301 跳转。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。