[AP documentation] Adding tabs and pages to users profile
Hi all!
I’m trying to use AP and AP profiles as a base for a social network going beyond the point of a “simple” Q&A community. In order to do so, I’m trying to customize AP user profile page to show more elements by using previous answers provided on this forum and trying to find my way in all the PHP files of the plugin (I’m no developer and this is my first serious attempt at getting a working customized code). I know some other users are trying to achieve similar results. So, with this new thread, I would like to:
- summarize what have been already said
- share what I have been able to achieve
- get some help in going a bit further
- add relevant information and pieces of code gathered to AP documentation
[Solved] Add/remove link from user menu
Easy to add links with this and remove some menu items with this. For a “Logout” link, it’s pretty useful and straightforward. But what if I want to display some content like the Following tab or the About tab?
[Solved…?] Add a tab with corresponding content in user menu
I’ve been trying among other things to display badges earned through the BadgeOS plugin. By reading this message, I have been able to understand (?) that I should: register a new “Badges” page, setup the output for the “Badges” page and, of course, create the corresponding badges.php. Is that correct?
Here is how I achieved it:
- Register page in /includes/class-user.php :
ap_register_user_page( 'badges', __( 'Badges', 'anspress-question-answer' ), array( __CLASS__, 'badges_page' ) );
- Setup output for page in /includes/class-user.php :
public static function badges_page() { include ap_get_theme_location( 'user/badges.php' ); }
- Create corresponding page in /theme/default/user/ : badges.php
By doing like that and using the proper code in badges.php, I have been able to achieve adding a tab with corresponding content and everything seems to be fine. So for now, I would like to know:
- is it the right way to do it?
- since I don’t know my way around php, I directly edited AP files (in a staging environment of course) so that I could learn from and copy/paste relevant pieces of code. Is there a way to achieve the same thing (register page + setup output) directly from my theme’s functions.php?
- As an alternative to editing functions.php, is it possible to create a folder called anspress inside active parent theme folder and copy the modified class-user.php file to override original one?
Ok, that’s it for now. Let’s go step by step. 😀
Thanks in advance!
Fred
Question 2:
By using the piece of code you provided, I’m able to register my new page and it is automatically added to the user menu, great! How can I decide in which position it will appear in the menu and assign an icon?
I tried to add a link using the method previously quoted hoping it would override the automatically added one:
function my_ap_user_link($links){ $links['badges'] = array( 'slug' => 'badges', 'title' => __( 'Badges', 'anspress-question-answer' ), 'link' => 'badges', 'order' => 100, 'show_in_menu' => false, 'public' => true, 'class' => 'apicon-chevron-right'); return $links; } add_filter( 'ap_user_menu', 'my_ap_user_link' );
It’s actually working but, I’m not sure it’s the right way to do it or not, and I don’t know which value to put for the “link” element.
So is it the right way to do it or can I actually specify order and icon class in my ap_register_user_page function? If it is the right way to do it, what should be the value for the “link” element?
This should be my last question on that matter. ^^; Thanks in advance. 😀
Fred
PS: sorry to post it as an answer but I need to add code to it. Maybe I should open a new thread but it is closely related to my first inquiry. If it’s still better to separate every questions, I’ll do it from next one. 😉
@Fred you don’t need to pass link arg, as it will be automatically added after filter
Thanks again Rahul, I really appreciate the time you take sorting things out for me! Actually, not passing the link argument is the first thing I tried and it’s not working. For example, if I use:
$links[‘badges’] = array( ‘slug’ => ‘badges’, ‘title’ => __(‘Badges’), ‘order’ => 100, ‘show_in_menu’ => true, ‘public’ => true, ‘class’ => ‘apicon-reputation’);
it helps me specify order and override icon but then the link always points to currently displayed user page. (If I’m checking the “About” page, then the “Badges” tab link is pointing to /user/about/.
Anyway, if using the $links[‘badges’] array to override order, icon,… is ok on a code level, it’s fine with me for now! 😀
Ok! I found the way to specify the link element! In my case, it should be: ‘link’ => ap_user_link( ap_get_displayed_user_id(), ‘badges’ ). Still don’t know if “overriding” the menu item with my_ap_user_link functions is the best way but at least it’s working. 😀