I’m currently working on a little russian social network powered by WordPress and I kinda got stuck this weekend on the user profile page. WordPress has got a pretty good mechanism for working with users, and the users meta piece is so awesome and useful. I’ve a little problem though, trying to output a tag cloud based on posts that a specific user has written.
In general this might seem simple, but for high performance the WordPress developers have mad a pretty complex taxonomy mechanism, that works like a charm, but I haven’t seen any author or author_id parameters in any of the taxonomy functions. Making a custom query to a database may be a little more complex than what I came up with, but I’m pretty sure it’s better at performance. Here’s the easy way:
$profile_user_id = get_profile("ID", "kovshenin"); // Replace this with yours $profileTags = array(); $wp_query = new WP_Query("showposts=-1&author=".$profile_user_id); while (have_posts()) { the_post(); $tags = (array) get_the_tags(); foreach ($tags as $key => $value) { if ($value->term_id > 0) { if (key_exists($value->term_id, $profileTags)) { $profileTags[$value->term_id]->count++; } else { $new_term = $value; $new_term->count = 1; $profileTags[$value->term_id] = $new_term; } } } } $profileTagCloud = wp_generate_tag_cloud($profileTags); echo $profileTagCloud;
What this does is it runs through all the posts by a specific user (kovshenin in my case) and retreives all the tags to each post via the get_the_tags function, then compares to what it has already collected in the $profileTags array and increments the count variable if that tag already existed there, or adds the new tag as an object into the array with count = 1.
You may find other parameters pretty useful too (link, slug, parent). I use the link parameter to lead to a new search by tag page limited to the specified user. Here’s a full list of parameters that should be included (and may be changed on the fly) and accepted by the wp_generate_tag_cloud function (using a print_r output):
Array ( [0] => stdClass Object ( [term_id] => 6 [name] => tag 2 [slug] => tag-2 [term_group] => 0 [term_taxonomy_id] => 6 [taxonomy] => post_tag [description] => [parent] => 0 [count] => 2 [link] => "http://localhost/tag/tag-2" [id] => 6 ) )
Also, keep in mind that this is an object (of stdClass) and may not be treated like an array. I’m working on a custom SQL query directly into the WordPress database to achieve the same results but in less time (I hope). I’ll get back to you after the benchmarking.
social gang-soi-9
How would I style the tags, do you know?
thanks alot.