删除WordPress文章链接中的子分类别名

2023-08-02

当你的 WordPress 固定链接使用/%category%/ 的时候,如果你发布文章嵌套在几个类别中,则 URL 可能会变得太长和混乱。于是乎就分享了上一篇《删除WordPress文章链接中的父级分类别名》,今天的话反推一下,分享一个只保留父级别名删掉单个子分类或更多层级子分类别名的方法,以统一美观WordPress网站问斩的最终URL格式。

一、单个子分类去掉url中的子分类别名

//单个子分类去掉url中的子分类别名 https://www.ufcn.cn/article/877070.html
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($cat->parent) { $subcats[] = $cat->slug;}}
if($subcats) {
foreach($subcats as $subcat) {
$subcat = $subcat.'/';
$permalink = str_replace($subcat, "", $permalink);}}
break;}
return $permalink;}

二、多层级子分类,去掉所有下级子分类别名

//多层级子分类,去掉所有下级子分类别名 https://www.ufcn.cn/article/877070.html
function remove_child_categories_from_permalinks( $category ) {
while ( $category->parent ) {
$category = get_term( $category->parent, 'category' );
}
return $category;
}
add_filter( 'post_link_category', 'remove_child_categories_from_permalinks' );