
I’ve been using Joost de Valk’s Simple Taxonomies plugin for a couple of projects, and I’ve been very disappointed by the formatting of the terms output code.
When configuring the plugin, you have the option of choosing “Add terms to the end of posts” or “Add terms to the end of excerpts.” If you do, you get a <div> and a couple of spans. Not very semantic. Also, the code uses an #id, instead of a .class, meaning that if you have more than one post on a page with taxonomies, it no longer validates.
Simple Taxonomies uses terms, so let’s make a list of them!
Here’s a way to reformat the code and prevent overwriting in future plugin updates. We’re going to strip the code and use a definition list instead (<dl>). Definition lists in HTML have a term and description; just as a custom taxonomies creates a taxonomy and its terms.
Add this code to your theme’s functions.php file:
// Remove the default Simple Taxonomies Formatting
remove_filter( 'the_excerpt', 'yoast_simple_taxonomies_excerpt_filter', 10, 1 );
remove_filter( 'the_content', 'yoast_simple_taxonomies_content_filter', 10, 1 );
// Make your own filter
function custom_simple_taxonomies_filter( $content, $type ) {
$opt = get_option('yoast_simpletax');
$output = '';
foreach ( $opt['taxonomies'] as $taxonomy ) {
$filter = false;
if ( $type == 'content' && $taxonomy['filter'] ) {
$filter = true;
} else if ( $type == 'excerpt' && $taxonomy['filterexcerpt'] ) {
$filter = true;
}
if ( $filter ) {
// For each term, create a dd wrapper (Definition Description)
$terms = get_the_term_list( $post->ID, $taxonomy['name'], $taxonomy['label'].':</dt><dd>', ',</dd><dd>', '</dd>' );
if ($terms)
// For each taxonomy, create a dt wrapper (Definition Term)
$output .= "\t".'<dt class="taxonomy-'.$taxonomy['name'].'">'.$terms."\n";
}
}
if ($output != '') {
// Wrap the shebang in a dl (Definition List)
$content .= '<dl class="yoast-taxonomy">'."\n".$output."\n".'</dl>'."\n";
}
return $content;
}
// Recreate the functions
function custom_simple_taxonomies_content_filter( $content ) {
return custom_simple_taxonomies_filter( $content, 'content' );
}
function custom_simple_taxonomies_excerpt_filter( $content ) {
return custom_simple_taxonomies_filter( $content, 'excerpt' );
}
// Add the filters back on the content
add_filter( 'the_excerpt', 'custom_simple_taxonomies_excerpt_filter', 10, 1 );
add_filter( 'the_content', 'custom_simple_taxonomies_content_filter', 10, 1 );
So, just paste the code into your functions.php file, and then you just need to style the output so that it looks the same (or not), and you’re all set.
Did this make your life easier? Was this information worth a buck?
Donate with PayPal (Much appreciated!)
