去掉WordPress分类目录链接中categorg【WP系列教程之十四】

很多人经历了wordpress系列安装和调试后,发现在初次使用wordpress创建分类目录编写文章发表后发现文章地址链接不是自己想象的样式,不是域名 - 分类别名 - 文章名组成,而是:

你的域名/ categorg / WordPress的/ 123.html

多了一个categorg这样的链接形式既不美观又增加了固定链接的层数深度不利于搜索收录,那么怎么去掉固定链接中categorg字符呢?

网上搜索一下发现有很多相关文章,但大部分都不好用,什么后台固定链接设置中分类目录前缀添加“”(都是些不靠谱不实用的方法),还有修改wordpress源文件的方法(且不说每次版本升级都会被覆盖的问题,针对wordpress不同版本也不是都适用的)。

这里我说两种比较实用的方法,插件和非插件实现去掉categorg

插件法:使用WordPress插件去掉分类目录链接前缀类别

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

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

缺点:用了WP No Category Base插件的话最好就一直使用下去,如果卸载不彻底会造成原文章无法访问的问题。

如果你已经安装该插件,现在又想卸载可以试试下面这个方法:

1.先在设置 - 固定链接内将URL方案换成开头默认的;

2.再在插件设置内禁用该插件;

3.最后改回原固定链接方案,并且删除插件;

好了,就这么简单咯,全部解决,然后WP No Category Base插件就被完全移除了

如果你不想为这么一个简单的东西而使用一款插件的话(WordPress非插件强迫症),可以试试下面介绍的方法。

非插件法:非插件代码化实现去掉WordPress分类链接中类字符

其实代码就是移植简化的WP没有类别Base插件中部分源码,在你当前主题的functions.php文件最后一个?>前添加如下代码就好:

/* 免插件去除 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();
}

// 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', '<')) { } 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;
}

// 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;
}

好了,经过上面几步你的网站就已经完美去除了categorg。现在去网站刷新一下就会看到效果了。

古风网络博客资源声明

本站资源来源于网络收集和网友分享,只供学习交流使用,请下载后24小时内删除。
如本站侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
本站部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
本站部分文章为原创,部分为转载,引用请保留链接信息,谢谢合作!
本文链接地址:https://www.liedun.top/685.html 去掉WordPress分类目录链接中categorg【WP系列教程之十四】

发表评论