WordPress remove <br/> separator from last item in wp_list_categories

I’m trying to remove the last separator (normally a <br/> tag but I changed it to “//”) from the last link from wp_list_categories.

Basically I want this:

Read More

Category 1 // Category 2 // Category 3 //

to look like this:

Category 1 // Category 2 // Category 3

Here’s the current code I’m using:

<?php
    $cat_array = array();
    $args = array(
        'author' => get_the_author_meta('id'),
        'showposts' => -1,
        'caller_get_posts' => 1
    );
    $author_posts = get_posts($args);
    if ( $author_posts ) {
        foreach ($author_posts as $author_post ) {
            foreach(get_the_category($author_post->ID) as $category) {
                $cat_array[$category->term_id] =  $category->term_id;
            }
        }
    }

    $cat_ids = implode(',', $cat_array);
    echo strtr(wp_list_categories('include='.$cat_ids.'&title_li=&style=none&echo=0'),array('<br />'=>' // '));
?>

Related posts

Leave a Reply

3 comments

  1. Change the last line to this:

    $output = strtr( wp_list_categories( 'include='.$cat_ids.'&title_li=&style=none&echo=0' ), array( '<br />' => ' // ' ) );
    echo preg_replace( '@s//sn$@', '', $output );
    
  2. You got a lotta string processing going on there. You might be better off outputting the results as a list

    wp_list_categories('include='.$cat_ids.'&title_li=');
    

    and styling it with css:

    li.cat-item { list-style-type: none; display: inline; }
    li.cat-item:before { content: " // "; }
    li.cat-item:first-child:before { content: none; }
    

    Just another alternative to consider…

  3. Another option, explode -> pop -> implode…

    $output = explode( '<br />', wp_list_categories( 'include='.$cat_ids.'&title_li=&style=none&echo=0' ) );
    array_pop($output);
    echo implode(' // ',$output);