去除WordPress固定链接中的category路径方法总结

从SEO的角度来说,网站链接越简洁越好,链接的路径越少越好。wordpress默认情况下设置固定链接,分类页面是有category路径的。

解决方法网上也有提供,有使用插件,有使用伪静态的。下面小峰来说一下,能处理的几种方法。
注:以下部分代码来源于网上。

方法一:

在functions.php文件中添加如下代码,然后到wp后台-设置-固定链接-保存一次即可生效。

/**
 * 去除固定链接中的/category/路径,记得在后台保存一次固定链接
 */
add_action('init', 'inlo_no_category');
function inlo_no_category() {
 global $wp_rewrite;
 $wp_rewrite -> extra_permastructs['category']['struct'] = '%category%';
}

对于 wordpress 中的各类问题,几乎都能找到插件解决,这个问题也不例外。但是很大一部分 wper 患有严重的代码控,但凡修改代码可以达到的效果绝不用插件代替,即便后者更为简单。所以在这里介绍一个非插件的方法:

1、Wordpress3.2之前版本

在目录 wp-includes/category-template.php 文件中搜索:

$catlink = $wp_rewrite->get_category_permastruct();在下面添加:

$catlink = str_replace('/category', "", $catlink);保存即可。

 

2、Wordpress3.2版本

在目录 wp-includes/category-template.php 文件中搜索:

function get_category_link( $category )在最后的

return $category;之前加入

$category = str_replace('/category', "", $category);优点:仅加入一段代码,性能影响忽略不计。适用于对代码稍熟悉的博客。缺点:修改代码,博客升级还要修改。且原地址仍可以访问。或会造成谷歌网站管理员工具里提到的,重复的标题。

方法二:

来源插件WP No Category Base上的代码,也是放到functions.php里面,
然后到wp后台-设置-固定链接-保存一次即可生效。
 /**
 * 去除固定链接中的/category/路径,添加后在后台保存一次固定链接
 * 基于 WP No Category Base 插件
 */
 
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;
}

方法三:

基于伪静态,编写.htaccess的301重定向规则,使用与主机系统为linux,将带有/category/的链接重定向至没有它的链接

RewriteEngine On
RewriteBase /
RewriteRule ^category/(.+)$ http://www.blhere.com/$1 [R=301,L]
将上面峰尚博客的网址替换为你的网址。

方法四

修改固定链接设置,去掉分类链接前缀category

登录你的Wordpress后台,打开固定链接/永久链接设置项,设置成以下形式:

•/%category%/%post_id%.html在“可选设置”里的“分类地址前缀”里输入半角字符: “.”;保存即可去掉分类前缀category。

优点:设置简单,老少皆宜。适用于初建成的博客,或刚打算使用固定链接 /永久链接的博客。用不着修改代码,升级之时没有顾虑;用不着插件,不会增加运行负担。
 缺点:原链接无法打开,出现404错误。被搜索引擎收录良好,或分类链接有较多外链链入的博客,可要万分小心了。不要因为操作简单、省时省力而损失了大量外链及权重。

wordpress固定链接设置的一些参数:
%year%:基于文章发布的年份,比如2010;
%monthnum%:基于文章发布的月份,比如01;
%day%:基于文章发布当日,比如06;
%hour%:基于文章发布小时数,比如23;
%minute%:基于文章发布分钟数,比如43;
%second%:基于文章发布秒数,比如33;
%postname%:基于文章的postname,其值为撰写时指定的缩略名,不指定缩略名时是文章标题;
%post_id%:基于文章post_id,比如48;
%category%:基于文章分类,子分类会处理成“分类/子分类”这种形式;
%author%:基于文章作者名

网上常见的几种设置方法:

•/%year%/%monthnum%/%day%/%postname%/

•/%year%/%monthnum%/%postname%/

•/%year%/%monthnum%/%day%/%postname%.html

•/%year%/%monthnum%/%postname%.html

•/%category%/%postname%.html

•/%post_id%.html总结:LosesToy认为,最好的 wordpress固定链接形式是:域名/文章 名(参数为/%postname%.html)。PS:原文作者已经说明最好参数,可本人觉得用/%post_id%.html 最简洁了

时间: 2024-09-20 14:31:37

去除WordPress固定链接中的category路径方法总结的相关文章

去除WordPress固定链接中category路径方法

解决方法网上也有提供,有使用插件,有使用伪静态的.下面小峰来说一下,能处理的几种方法. 注:以下部分代码来源于网上. 方法一: 在functions.php文件中添加如下代码,然后到wp后台-设置-固定链接-保存一次即可生效.  /**  * 去除固定链接中的/category/路径,记得在后台保存一次固定链接  */ add_action('init', 'inlo_no_category'); function inlo_no_category() {  global $wp_rewrite

删除wordpress固定链接后URL中的category的方法

插件方案删除category的方法 wordpress设置伪静态(即后台--设置--固定链接,非默认)后,分类目录的URL结构会变成http://域名/category/目录别名,显然其中的category/很碍眼.前面介绍过两款插件 No category parents 和 wp-no-category-base 用于去掉伪静态后分类目录URL的category/部分,现在再介绍一款删除分类目录URL中category/的插件FV Top Level Categories. 插件介绍: 设置

Nginx下修改WordPress固定链接导致无法访问的问题解决_nginx

今天下午没事,像以往一样开始做seo的优化,当然牵扯到永久链接,wordpress提供多种类型的链接形式     1/%year%/%monthnum%/%day%/%postname%/     2/%year%/%monthnum%/%postname%/     3/%year%/%monthnum%/%day%/%postname%.html     4/%year%/%monthnum%/%postname%.html     5/%category%/%postname%.html

wordpress固定链接设置的一些心得

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 捣鼓博客,先前纠结模板的选用,模板选好了又纠结固定链接.我总是不消停.首先看下wordpress的固定链接设定. 此功能允许自定义链接形式,以提高美感.可用性和向前兼容性.(需要主机支持伪静态) 我们设置固定链接无非是让博客链接更加的美观,以及对SEO优化会有所帮助. 先来看看网上一些常用的链接格式: 1/%year%/%monthnum%/

WordPress固定链接修改成日期 作者的形式

例如/post/author/frustigor,/post/date/2014/04,这就很奇怪了,非常不好看,也没有必要.我们想要的结果三/author/name和/date/year/month的形式.怎么来修理呢?这篇文章告诉你答案. 1.你必须了解的事 ↑ 我们需要先了解这些事实:1.你必须通过编写wordpress相关的php程序才能解决这个问题:2.你必须懂,这个问题关系着两个东西,一个是链接,例如"2014年3月"这个边侧栏里面的链接必须修改为链接到不带post的URL

wordpress在文章中插入菜单的方法

在functions.php里加入以下代码  代码如下 复制代码 add_shortcode('menu', 'wps_menu_shortcode'); function wps_menu_shortcode($atts, $content = null) { extract(shortcode_atts(array( 'name' => null, ), $atts)); return wp_nav_menu( array( 'menu' => $name, 'echo' => fa

去除图像或链接黑眼圈的两种方法总结_javascript技巧

blueidea

wordpress搏客伪静态固定链接设置失败的解决办法

说句不怕大家笑话的话,做了四五年的网站了却从来不会设置网站的伪静态链接,一般都是程序自带的.即使是动态的链接我也不在乎,在乎又有什么办法呢,不会呀.今天我用一天的时间来研究wordpress设置伪静态链接的方法,没想到研究了一天,晚上的时间终于研究好了,所以才想写篇文章,希望能帮助到和比尔云遇到一样问题的朋友,好了,下面进入今天的主题. 第一个,wordpress固定链接设置的方法 1.不要让日期出现在固定链接里面 这基于两个方面的考虑.一是如果数字出现在固定链接里面,等于提醒搜索引擎,这是很旧

WordPress 更改固定链接实例讲解

WordPress 博客原来的固定链接模式是:http://site.com/archives/%post_id%.html 现在想改为:http://site.com/%post_name% 要求: 1. 老文章(http://site.com/archives/%post_id%.html)能 301 跳转到新固定链接方式 2. 新文章是 http://site.com/%post_name% 方法: 0. 前提 - 敬告:折腾有风险!!!涉及到数据库操作,请在折腾前认真备份好数据库!!!