使用过wordpress的朋友应该都知道,默认的分类URL中是有一层category目录的。其实这对一般的使用并不会有太大的影响,并且从SEO方面考虑,如果是根据逻辑结构分配权重,也不会有太大影响。但对于思享来说,多一个没多大意义的category目录,怎么看都不舒服。所以思享包括绝大多数站长都会选择简化URL,将category去掉。
functions.php添加代码去除
- //去除分类标志代码
- 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();
- }
- // 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'][0] = '%category%';
- } 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;
- }
- //去除分类标志代码结束
思享目前就是用的这种方法,好处就是可以不受wordpress版本升级的影响,带category会301重定向到不带的URL。至于是否需要主机支持,我这个小白就不太清楚了,反正我的是支持301并OK的
修改Wordpress函数去除
修改目标文件:wp-includes文件夹下的category-template.php
修改函数:
搜索(get_category_link()函数里)的以下代码:
- $catlink = $wp_rewrite->get_category_permastruct();
在其后,另起一行加入:$catlink = str_replace('/category' , '' , $catlink);代码作用是,使用字符串替换函数,把获取分类链接函数的分类链接里的/category替换掉。达到去掉分类链接前缀/category的目的。
优点:仅加入一段代码,性能影响忽略不计。适用于对代码稍熟悉的博客。
缺点:修改代码,博客升级还要修改。且原地址仍可以访问。同样一个页面有两个URL,不利于SEO
WP No Category Base插件去除
优点:安装简单,老少皆宜。无论是初建成的博客,还是正打算使用固定链接 /永久链接的博客,还是被搜索引擎收录良好的博客。用不着修改代码,升级之时没有顾虑。使用 301跳转,把原链接进行跳转。最大程度防止搜索引擎降权,防止原链接打不开。
不足:插件或许会造成空间负担。这里不说是缺点,就是因为,造成的“空间负担”微乎其微,不应该是缺点。比较在意的就不用,推荐使用。
修改固定链接设置去除
登录你的Wordpress后台,步骤:
WordPress后台——设置——固定链接——分类目录前缀里输入半角字符: “.”
然后保存即可去掉分类前缀category。
优点:设置简单,老少皆宜。适用于初建成的博客,或刚打算使用固定链接 /永久链接的博客。用不着修改代码,升级之时没有顾虑;用不着插件,不会增加运行负担。
缺点:原链接无法打开,出现404错误。被搜索引擎收录良好,或分类链接有较多外链链入的博客,可要万分小心了。不要因为操作简单、省时省力而损失了大量外链及权重。除此之外,思享在添加canonical标签的时候,发现目录调用出来的地址是:"https://www.4xseo.com/./seojichu"。总的来说,还是不推荐使用这种方法。
转载请注明:思享SEO博客 » wordpress去除url中category的方法大全