I needed a placeholder for tags input but it’s boring to display the same tags every time. But unlike posts, WP doesnt have “rand” orderby paramater. So what you can do; is to get a #no of tags and shuffle them.
So basically what we do is:
- Check if we have a recent transient
- If not, query the tags.
- Note the allowed orderby parameters for tags are defined as $tag_rnd_arr, which will add more randomness to them
- 11 is the number of tags to get, 3 is the number of tags to return. You can increase or decrease them
function eobtn_get_rand_tags() { $rand_tags = get_transient("rand_tags"); // Check if we have queried 3 random tags recently if(!$rand_tags) { $tag_rnd_arr = array("name","count","term_id"); $tag_argz=array( "orderby" => array_rand($tag_rnd_arr), "order" => "DESC", "number" => 11, "hierarchical" => false, "fields" => "names" ); $tags = get_tags($tag_argz); $rand_tags = array(); shuffle($tags); $ran_key_arr = array_rand($tags, 3); foreach ($ran_key_arr as $ran_tag ) { $rand_tags[] = $tags[$ran_tag]; } // Save the result for a short time (3 secs) to save an extra query hit if you have thousands of tags and / or visitors set_transient("rand_tags",$rand_tags, 3); } return $rand_tags; }
If you need echoing them instead of returning, you can simply echo them using
if ($rand_tags) { foreach($rand_tags as $tag) { echo '<a href="'.get_tag_link($tag->term_id).'">'.$tag->name . '</a>'; if($tc != 3 || $ttc != 1) echo ', '; } }