Wordpress自定义类型的文章链接结构变换
作者:秋了秋 发表时间:2014年12月14日
wordpress自定义类型文章相信很少人会用到,但并不是没有人会用到,比如说秋叶网络博客的说说页面,其实就是一种自定义类型文章的展示页面,但长期写说说以来,秋叶发现一个很严重的现象,那就是这种文章类型的网址结构居然不遵从wordpress的固定链接设置,而是使用默认的//netblog.cn/shuoshuo/%postname%这种结构,当你的文章标题是“秋叶”的时候,那么它的网址就是//netblog.cn/shuoshuo/秋叶,这种链接很不利于用户体验,特别是当文章网址很长的时候,比如说“新版WordPress出现canonical问题的修复方法”,则它的链接是//netblog.cn/新版WordPress出现canonical问题的修复方法,放到浏览器上就成了//netblog.cn/%E6%96%B0%E7%89%88WordPress%E5%87%BA%E7%8E%B0canonical%E9%97%AE%E9%A2%98%E7%9A%84%E4%BF%AE%E5%A4%8D%E6%96%B9%E6%B3%95,仔细数了一下总长度为139个字符数,虽说这种动态链接对百度搜索引擎无太大影响,但是长度会影响的,特别对增加了网页冗余代码贡献了一份不可估量的力量。解决这类方法就是把这种链接转变为//netblog.cn/blog/199.html的格式或者//netblog.cn/123的格式,具体做法为:在主题中的functions.php里面添加:
//设置说说固定链接结构为 ID.html
add_filter('post_type_link', 'custom_book_link', 1, 3);
function custom_book_link( $link, $post = 0 ){
if ( $post->post_type == 'shuoshuo' ){
return home_url( 'shuoshuo/qiuye-'. $post->ID .'.html' );
} else {return $link;}}
add_action( 'init', 'custom_book_rewrites_init' );
function custom_book_rewrites_init(){
add_rewrite_rule(
'shuoshuo/qiuye-([0-9]+)?.html
以上提供的链接格式为://netblog.cn/qiuye-ID.html,注意把红色部分替换成自己的文章类型,有的人可能不止一种新增的文章类型,需要变换多种文章类型的链接结构,那后面有备用方法,同样在该文件中添加:
$mytypes = array(//根据需要添加你的自定义文章类型 'type1' => 'slug1', 'type2' => 'slug2', 'type3' => 'slug3' ); add_filter('post_type_link', 'my_custom_post_type_link', 1, 3); function my_custom_post_type_link( $link, $post = 0 ){ global $mytypes; if ( in_array( $post->post_type,array_keys($mytypes) ) ){ return home_url( $mytypes[$post->post_type].'/' . $post->ID .'.html' ); } else {return $link;}} add_action( 'init', 'my_custom_post_type_rewrites_init' ); function my_custom_post_type_rewrites_init(){ global $mytypes; foreach( $mytypes as $k => $v ) { add_rewrite_rule( $v.'/([0-9]+)?.html
至于这种自定义类型文章比如说说怎么添加大家可以参考文章:纯代码给wordpress增加说说/微博/微语功能。
, 'index.php?post_type=shuoshuo&p=$matches[1]', 'top' );}以上提供的链接格式为://netblog.cn/qiuye-ID.html,注意把红色部分替换成自己的文章类型,有的人可能不止一种新增的文章类型,需要变换多种文章类型的链接结构,那后面有备用方法,同样在该文件中添加:
至于这种自定义类型文章比如说说怎么添加大家可以参考文章:纯代码给wordpress增加说说/微博/微语功能。
, 'index.php?post_type='.$k.'&p=$matches[1]','top' );}}