霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

WordPress去掉url中的category

如何去掉wordpress分类url中的category呢?

wordpress管理后台permalinks中可以设置Category base,将category改成其他的uri分类前缀,但是就是不能设置没有分类url前缀。因为如果留空白不填则表示使用默认的category作为Category base。

Google了一下,网上有很多方法可以实现去掉wordpress分类url的category前缀。本文总结列出,这几种方法大家都可以尝试一下。

第一种方法最简单,直接在wordpress管理后台设置。设置Category base只填写一个.(英文状态的句号)就可以去掉category这个url前缀了。但是这种方法在wordpress页面需要翻页时行不通,跳转到页面不存在的404页面。

第二种方法是安装使用相关的插件,比如top-level-catsWP No Category Base等。部分同学反映用top-level-cats插件有时候也会出错。强烈建议使用WP No Category Base插件。点此直接下载

第三种方法是使用.htaccess文件重写wordpress分类url,并301转向:

RewriteRule ^category/(.+)$ http://www.frostsky.com/$1 [R=301,L]

第四种方法是修改 wordpress 源代码,找到wp-includes/rewrite.php 文件的第371行:

$this->category_structure = $this->front . ‘category/';
移除 “category” ,编辑成如下所示:
$this->category_structure = $this->front . ‘/';

第五种方法是修改 wordpress核心源码 /wp-includes/category-template.php文件:

找到:$catlink = str_replace( ‘%category%’, $category_nicename, $catlink );
在它后面加上$catlink = str_replace(‘category/’, ”, $catlink);

第六种方法是只修改主题文件,不编辑wordpress核心源码:

首先在wordpress主题文件夹内的functions.php文件中加入下面的php函数:

function fix_slash( $string, $type )
{
global $wp_rewrite;
if ( $wp_rewrite->use_trailing_slashes == false )
{
if ( $type != ‘single’ && $type != ‘category’ )
return trailingslashit( $string );

if ( $type == ‘single’ && ( strpos( $string, ‘.html/’ ) !== false ) )
return trailingslashit( $string );

if ( $type == ‘category’ && ( strpos( $string, ‘category’ ) !== false ) )
{
$aa_g = str_replace( “/category/”, “/”, $string );
return trailingslashit( $aa_g );
}
if ( $type == ‘category’ )
return trailingslashit( $string );
}
return $string;
}

add_filter( ‘user_trailingslashit’, ‘fix_slash’, 55, 2 );

如果wordpress分类页面也有分类的url的话,再修改主题目录中的文件category.php修改分类url,如:

<a href=”http://www.frostsky.com/<?php echo str_replace(‘ ‘, ‘-‘, strtolower(single_cat_title(“”, false)));?>/”><?php echo single_cat_title(“”, false);?></a>

 



There are 3 Comments to "WordPress去掉url中的category"