Currently I have this code

$tag_list = get_the_tag_list('<ul><li>','</li><li>','</li></ul>');

and outputs:

<ul>
    <li><a href="tag_link">tag_name</a></li>
    ....
</ul>

How can I change it so it displays like this?

<ul>
    <li><a href="tag_link"><span>tag_name</span></a></li>
    ....
</ul>
link|improve this question

75% accept rate
feedback

2 Answers

up vote 1 down vote accepted

So, from the get_the_tag_list() Codex entry:

  • $before
    • (string) (optional) Leading text.
    • Default: 'Tags: '
  • $sep
    • (string) (optional) String to separate tags.
    • Default: ', '
  • $after
    • (string) (optional) Trailing text.
    • Default: None

Since you're using this example:

get_the_tag_list('<ul><li>','</li><li>','</li></ul>');

...edited to save space...

Modify it as such:

get_the_tag_list( '<ul><li><span>', '</span></li><li><span>', '</span></li></ul>' );

...should get you what you're after.

EDIT

I think you misunderstood my question. The span is supposed to be in the anchor tags. Your method would output <li><span><a></a></span></li>

Sorry about that; I misread the question.

This gets a bit trickier, but is entirely possible. The get_the_tag_list() template tag uses get_the_term_list(), which has a filter for the term links, called term_links-$taxonomy (which for tags would be, term_links-post_tag.

So, you could write a filter:

function mytheme_filter_post_tag_term_links( $term_links ) {
    $wrapped_term_links = array();
    foreach ( $term_links as $term_link ) {
        $wrapped_term_links[] = '<span>' . $term_link . '</span>';
    }
    return $wrapped_term_links;
}
add_filter( 'term_links-post_tag', 'mytheme_filter_post_tag_term_links' );

Note: this will apply to every use of get_the_term_list() that outputs post tags. Caveat emptor.

link|improve this answer
1  
hey there! I think you misunderstood my question. The span is supposed to be in the anchor tags. Your method would output <li><span><a></a></span></li> – mitsukare Oct 27 '11 at 13:14
Okay, see updated answer; I indeed has misread your question. – Chip Bennett Oct 27 '11 at 13:50
feedback

you could use a filter function, added to functions.php of your theme:

add_filter('the_tags', 'wp32234_add_span_get_the_tag_list');

function wp32234_add_span_get_the_tag_list($list) {
    $list = str_replace('rel="tag">', 'rel="tag"><span>', $list);
    $list = str_replace('</a>', '</span></a>', $list);
    return $list;
}
link|improve this answer
thanks, this works only for tags right? – mitsukare Oct 27 '11 at 17:36
as far as I can see, this works on the_tags() and get_the_tag_list(). – Michael Oct 27 '11 at 17:50
this would make a perfect answer too! – mitsukare Oct 27 '11 at 19:23
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.