Thursday, February 7, 2013

Filtering categories in the permalink structure

The way to remove the parent category from a permalink when using the 
/%category%/%postname%/ custom structure 
 add_filter( 'post_link', 'remove_parent_cats_from_link', 10, 3 ); 
 
function remove_parent_cats_from_link( $permalink, $post, $leavename )
{
    $cats = get_the_category( $post->ID );
    if ( $cats ) {
     // Make sure we use the same start cat as the permalink generator
     usort( $cats, '_usort_terms_by_ID' ); // order by ID
     $category = $cats[0]->slug;
     if ( $parent = $cats[0]->parent ) {
     // If there are parent categories, collect them and replace them in the link
       $parentcats = get_category_parents( $parent, false, '/', true );
       // str_replace() is not the best solution if you can have duplicates:
       // myexamplesite.com/luxemburg/luxemburg/ will be stripped down to myexamplesite.com/
       // But if you don't expect that, it should work
        $permalink = str_replace( $parentcats, '', $permalink );
        }
    }
    return $permalink;
}

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.