WordPress如何去除分类目录URL中的category?

admin
admin
admin
376
文章
102
评论
2021年1月26日19:56:00
评论
454

WordPress如何去除分类目录URL中的category?刚接触WordPress的朋友可能会发现,WordPress设置完固定链接,添加文章分类目以后前台显示的目录URL是类似这样的https://www.pinzixing.com/category/wordpress/,中间多出来一个category这个层级,对于我们seo优化来说url地址肯定是越短越好,能去掉最好去掉。今天说一下去掉这个category的方法的五种方法,推荐用第五种去除category的方法:

方法一:直接在后台的固定链接里设置。

后台——> 设置 ——> 固定链接 ——> 分类目录前缀 ,在“分类目录前缀”后面的表单中添加一个英文句号就可以了。这种方法有时能成功,但有时会在前台打开分类目录时会出现404错误。

优点:设置比较简单,不用改代码,不用装插件。

缺点:原链接无法打开,会爆404错误,如果前期收录良好的博客或者分类URL做过外链,就得另外做301跳转。另外本人总感觉这种方法很奇怪。WordPress如何去除分类目录URL中的category?

方法二:通过插件实现,也是最简单便捷的方法。

如: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功能给大家:WordPress如何去除分类目录URL中的category?

最后,总结一下,我推荐大家用WP主题自带的去除category的功能,不用改代码,不用另外装插件,只需要选择一款好主题就ok!

 

admin
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: