刚接触WordPress的朋友可能会发现,WordPress设置完固定链接,添加文章分类目以后前台显示的目录URL是类似这样的https://www.pinzixing.com/category/wordpress/,中间多出来一个category这个层级,对于我们seo优化来说url地址肯定是越短越好,能去掉最好去掉。今天说一下去掉这个category的方法的五种方法,推荐用第五种去除category的方法:
方法一:直接在后台的固定链接里设置。
后台——> 设置 ——> 固定链接 ——> 分类目录前缀 ,在“分类目录前缀”后面的表单中添加一个英文句号就可以了。这种方法有时能成功,但有时会在前台打开分类目录时会出现404错误。
优点:设置比较简单,不用改代码,不用装插件。
缺点:原链接无法打开,会爆404错误,如果前期收录良好的博客或者分类URL做过外链,就得另外做301跳转。另外本人总感觉这种方法很奇怪。
方法二:通过插件实现,也是最简单便捷的方法。
如:wp-no-category-base(请自行点击进行下载);
方法三:修改function.php这个文件来实现实现。
通过修改WordPress当前主题目录下面的function.php这个文件来实现,其实这种方法只是恩将上述wp-no-category-base主代码截取下来罢了,代码如下:
//去除分类目录URL中的/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(); } add_action('init', 'no_category_base_permastruct'); function no_category_base_permastruct() { global $wp_rewrite, $wp_version; if (version_compare($wp_version, '3.4', '<')) { $wp_rewrite -> extra_permastructs['category'][0] = '%category%'; } else { $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%'; } } add_filter('category_rewrite_rules', 'no_category_base_rewrite_rules'); function no_category_base_rewrite_rules($category_rewrite) { $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]'; } 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]'; 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) { 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; }
方法四:修改wp-includes文件夹下的category-template.php
登陆网站FTP,找到WordPress个目录下面wp-includes文件夹下的category-template.php。打开此文件,搜索(get_category_link()函数里)的以下代码:
$catlink = $wp_rewrite->get_category_permastruct();
在其后,另起一行加入:
$catlink = str_replace('/category' , '' , $catlink);
代码作用是,使用字符串替换函数,把获取分类链接函数的分类链接里的/category/替换掉。达到去掉分类链接前缀/category/的目的。
方法五:用WordPress主题自带的去除category功能
如果你用了一些比如知更鸟主题、xiu主题等比较成熟WP商业主题,主题会自带去除category的功能,具体自己去WP后台主题选项找一找,我这里截取一张知更鸟主题的去除category功能给大家:
最后,总结一下,我推荐大家用WP主题自带的去除category的功能,不用改代码,不用另外装插件,只需要选择一款好主题就ok!
评论