Tagged: buddypress, profile, tabs
I have a challenge which i am unable to solve by myself.
I have a website where users can submit their own posts. And to tag the posts they use custom taxonomies (1 taxonomy term per post maximum) that will “group” the posts in “collections”
In the profile of the members of my website, i have a nav item called ‘Collections’. So when viewing this tab, I would like to create a list with all the Taxonomy Terms the user has used in the posts.
My challenge is to get a subnav page where all the posts per taxonomy term can be viewed.
example:
User john has submitted 2 posts, 1 with taxonomy term ‘foo’, and the other with taxonomy term ‘bar’. The nav tab ‘Collections’ (http://website.com/member/john/collections) should display Foo and Bar with links to a subnav page.
Subnav pages:
http://website.com/member/john/collections/foo -> contains john’s posts with taxonomy term foo
http://website.com/member/john/collections/bar -> contains john’s posts with taxonomy term barProblem is that the taxonomy terms are not fixed, member can use whichever term they want, so the tabs have to be dynamically created.
I have already created a nav tab called ‘collections’ and i have below code to create a subnav tab.
function my_custom_subnav() { global $bp; bp_core_new_subnav_item( array( 'name' => 'TAXONOMY TERM', // Taxonomy name 'slug' => 'taxonomy-term', // taxonomy-term with dashes for spaces 'screen_function' => 'subnav_function_to_show_screen', 'parent_url' => trailingslashit( bp_displayed_user_domain() . 'collections' ), 'parent_slug' => 'collections', 'position' => 100, // position is not important as i want to hide the subnav menu items and use the list in the parent nav tab ) ); } function subnav_function_to_show_screen() { //add title and content here – last is to call the members plugin.php template add_action( 'bp_template_title', 'subnav_function_to_show_screen_title' ); add_action( 'bp_template_content', 'subnav_function_to_show_screen_content' ); bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) ); } function subnav_function_to_show_screen_title() { // WANT TO ECHO TAXONOMY TITLE } function subnav_function_to_show_screen_content() { // GET ALL POSTS FROM DISPLAYED USER WITH THE TAXONOMY TERM } add_action( 'bp_setup_nav', 'my_custom_subnav' );
and I have piece of code which fetches all Taxonomy Terms which John uses
/** GET COLLECTIONS TAXONOMY TERMS */ function list_author_used_terms($author_id){ // get the author's posts $posts = get_posts( array('post_type' => 'post', 'posts_per_page' => -1, 'author' => $author_id) ); $author_terms = array(); //loop over the posts and collect the terms foreach ($posts as $p) { $terms = wp_get_object_terms( $p->ID, 'collection'); foreach ($terms as $t) { $author_terms[] = $t->name; } } return array_unique($author_terms); }
So what i am looking to achieve is to create a loop, where a subnav tab is created for each of the terms that John has used.
Is what i am looking to achieve possible?
Hi,
Just trying to find some clarifications here.
A Term can be used by more than one user, is that correct?Also, you only want to display the terms used by the user and not all the terms in that particular taxonomy?
Hi Brajesh,
1) Yes, a term can be used by more than 1 user
2) Also correct, ONLY the terms used by the displayed userThe code above (GET COLLECTIONS TAXONOMY TERMS) gets only the terms used by the displayed user.
return array_unique($author_terms);
And i am looking to loop this array and create a subnav tab for each term in this array.
Ok,
Here is a slightly modified version of your last functionfunction list_author_used_terms($author_id){ // get the author's posts $posts = get_posts( array('post_type' => 'post', 'posts_per_page' => -1, 'author' => $author_id) ); $author_terms = array(); //loop over the posts and collect the terms foreach ($posts as $p) { $terms = wp_get_object_terms( $p->ID, 'collection'); foreach ($terms as $t) { $author_terms[$t->term_id] = $t; } } return $author_terms; }
and here is an example use
$terms = list_author_used_terms( 1 ); $links = array(); foreach( $terms as $term ) { $links[] = sprintf( "<a href='%s'>%s</a>", get_term_link( $term ), $term->name ); } echo join( '', $links );
Hope that helps.
Thanks for your reply.
What is seems to do is get the terms and a link, right?
That is not what i was actually asking your help for. what i was looking to achieve is to create a subnav tab for each term in the buddypress member profile view.
so by looping functions my_custom_subnav(), function subnav_function_to_show_screen_title() and
function subnav_function_to_show_screen_content() for each term the user has used within the custom taxonomy.nav tab: collection (default fixed profile tab)
sub nav tab: term1, term3, term 4, term7 (depending on the terms the user has used in the submitted posts)I hope that clarifies what i am looking to achieve.
You must be logged in to reply to this topic.