日期:2014-11-28 阅读:3360
dmandwp系统 - wordpress系统和DM系统区块建站>>
上一节课我们讲了自定义文章类型和分类。
但是自定义文章类型的premalink会是标题,如果是中文的话,如果你的web服务器不支持,就不能访问了。
如果当前文章的标题是手机,那么url会是:
www.yoursite.com/?tvproduct=手机
可以让url更友好:
第一步:你在types插件可以配置成 www.yoursite.com//tvproduct/手机,
第二步:后台的premalink也要设置为非默认 ,也就是要重写了。
---这步很重要,也就是说 types里,文章和分类的类型设置里,如果设为重写的话,那后台的premalink也要设置,要一致。
--------------------
但不管怎么样,都是有中文的。
其实我们想要的是 /?post_type=tvproduct&p=58 或者是 /tvproduct/58 或 /tvproduct/58.html, 也就是把中文标题换成id就可以了。
那怎么办:
参考代码:
在function.php加:
add_filter('post_type_link', 'custom_book_link', 1, 3);
function custom_book_link( $link, $post = 0 ){ //第一步,转化url
if ( $post->post_type == 'tvproduct' ){
$returnlink = '?post_type=tvproduct&p='.$post->ID;
//return home_url($returnlink);
return home_url( 'tvproduct/' . $post->ID .'.html' ); //这里改成htm或去掉都可以,但后台premalink要重新保存下才行。
} else {
return $link;
}
}
add_action( 'init', 'custom_book_rewrites_init' ); // 第二步,这是表示要重写,不然没法支持这种url写法
function custom_book_rewrites_init(){
add_rewrite_rule(
'tvproduct/([0-9]+)?.html$',
'index.php?post_type=tvproduct&p=$matches[1]',
'top' );
}
---------------------------
如果是多个文章类型,则要:
(需要一点php就能看的懂。)
$mytypes = array(//根据需要添加你的自定义文章类型
'tvproduct' => 'tvproduct',
'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$',
'index.php?post_type='.$k.'&p=$matches[1]',
'top' );
}
}
参考资料:http://www.solagirl.net/custom-post-type-permalink.html