While following this article to get tags by date, I was wondering if I could exclude certain tags from what gets returned. The point is to have trending tags but some tags will always be there and I don’t want to include those ones.
Here is the code:
<?php
$how_many_posts = 50;
$args = array(
'posts_per_page' => $how_many_posts,
'orderby' => 'date',
'order' => 'DESC',
);
// get the last $how_many_posts, which we will loop over
// and gather the tags of
query_posts($args);
//
$temp_ids = array();
while (have_posts()) : the_post();
// get tags for each post
$posttags = get_the_tags();
if ($posttags) {
foreach($posttags as $tag) {
// store each tag id value
$temp_ids[] = $tag->term_id;
}
}
endwhile;
// we're done with that loop, so we need to reset the query now
wp_reset_query();
$id_string = implode(',', array_unique($temp_ids));
// These are the params I use, you'll want to adjust the args
// to suit the look you want
$args = array(
'smallest' => 15,
'largest' => 15,
'unit' => 'px',
'number' => 10,
'format' => 'flat',
'separator' => "n•n",
'orderby' => 'count',
'order' => 'DESC',
'include' => $id_string, // only include stored ids
'link' => 'view',
'echo' => true,
);
wp_tag_cloud( $args );
?>
UPDATE: I am wondering since doing passing an ‘exclude’ object in the args for wp_tag_cloud didn’t work as one answer suggested, if doing an unset before the wp_tag_cloud runs is how to make this work? The problem is is that I don’t know much about php or WordPress so I’m not sure how to work that in to the above code.
foreach( $tags as $tag_key => $tag_object ) {
if ( 'tag1' == $tag_object->slug || 'tag2' == $tag_object->slug ) {
unset( $tags[$tag_key] );
}
}
Thanks for your help!
UPDATE 2:
@artlung answer worked perfectly.
The function
get_the_tags
returns an array of objects, one object for each tag assigned to the post. If you want to exclude some tags you can do it in thewp_tag_cloud
function by the tag id or slug. Example: