需求:在wordpress站点,删除链接的子分类(Remove sub category slug from permalink URL)
固定连接设置为:http://www.x.com/%category%/%post_id%/
如果分类(cat)存在子分类(sub-cat)时,固定链接则为http://www.x.com/cat/sub-cat/123/
希望是http://www.x.com/cat/123/
思路:修改post链接格式
添加自定义规则
在主题函数文件添加代码
add_filter(
'post_link',
'custom_post_type_link',
10,
3); function custom_post_type_link($permalink, $post, $leavename) {
if (!gettype($post) == 'post') {
return $permalink;
}
switch ($post->post_type) {
case 'post':
//$permalink = get_home_url() . '/' . $post->post_name . '/';
$cats = get_the_category($post->ID);
$subcats = array();
foreach( $cats as $cat ) {
$cat = get_category($cat->term_id);
if($cat->parent) { $subcats[] = sanitize_title($cat->name); }
}
if($subcats) {
foreach($subcats as $subcat) {
$subcat = $subcat.'/';
$permalink = str_replace($subcat, "", $permalink);
}
}
break;
}
return $permalink;}
发现sanitize_title($cat->name); 是把分类的名称作为slug,觉得我的分类都添加了slug,于是我试着把
//if($cat->parent) { $subcats[] = sanitize_title($cat->name);
修改为
if($cat->parent) { $subcats[] = $cat->slug;
结果成功。
拓展
来自sola的分享:用.html作为url后缀时的分页链接问题
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫