Как в профиле пользователя buddypress добавить свое меню(кнопки) с вкладками?

Решено

Здравствуйте. Подскажите как можно добавить свои вкладки(кнопки) на странице пользователя? Желательно с возможностью создавать под вкладки. Я  нашел способ как это сделать прямо в плагине buddypress, но такое решение мне не подходит, так как при обновления плагина все изменения слетят. Я бы хотел данный функционал вынести в шаблон вордпресс или в отдельный плагин.

Добавить Комментарий
Ответ

Для реализация дополнительный пунктов меню в профиле пользователя buddypress используйте следующий код:

Для добавления нового пункта меню:

 /*
 * Добавляем основной пункт меню
 */
 add_action('bp_setup_nav', 'mb_bp_profile_menu_campaigns', 301 );
 function mb_bp_profile_menu_campaigns() {
 global $bp;
 bp_core_new_nav_item(
 array(
 'name' => 'Campaigns',
 'slug' => 'profile_campaigns',
 'position' => 1,
 'default_subnav_slug' => 'campaigns_active', // slug под меню для открытия по умолчанию.
 'screen_function' => 'mb_campaigns_active' // функции которая будет срабатывать при переходе по данному пункту меню.
 )
 );
 }
 

Добавляем под меню для меню profile_campaigns:
 add_action('bp_setup_nav', 'mb_bp_profile_submenu_campaigns', 302 );
 function mb_bp_profile_submenu_campaigns() {
 global $bp;
 if(!is_user_logged_in()) return '';
 bp_core_new_subnav_item( array(
 'name' => 'Active',
 'slug' => 'campaigns_active',
 'parent_url' => $bp->loggedin_user->domain . $bp->bp_nav['profile_campaigns']['slug'] . '/' , // ['slug основного пункта меню']['slug']
 'parent_slug' => $bp->bp_nav['profile_campaigns']['slug'],
 'position' => 10,
 'screen_function' => 'mb_campaigns_active' // функции которая будет срабатывать при переходе по данному пункту меню
 )
 );
 bp_core_new_subnav_item( array(
 'name' => 'Completed',
 'slug' => 'campaigns_completed',
 'parent_url' => $bp->loggedin_user->domain . $bp->bp_nav['profile_campaigns']['slug'] . '/' ,
 'parent_slug' => $bp->bp_nav['profile_campaigns']['slug'],
 'position' => 10,
 'screen_function' => 'mb_campaigns_completed'
 )
 );
 }
 

Функции вывода контента меню и под меню в профиле пользователя bp

 /*
 * функции для под меню
 */
 // подменю Active
 function mb_campaigns_active(){
 add_action( 'bp_template_content', 'mb_campaigns_active_show' );
 bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
 }
 function mb_campaigns_active_show() {
 echo 'campaigns_active_show';
 }
 // подменю Completed
 function mb_campaigns_completed(){
 add_action( 'bp_template_content', 'mb_campaigns_completed_show' );
 bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
 }
 function mb_campaigns_completed_show() {
 echo 'campaigns_completed_show';
 // echo do_shortcode('[shortcode]'); // Displays a shortcode output.
 }
 

Добавить Комментарий

Спасибо за код. Есть дополнительные вопросы по этой теме:

1. Как организовать порядок расположения нового пункта в Меню. Пробовал поменять позицию в коде ‘position’ => 1, на ‘position’ => 2, почему-то не сработало…
2. Как создать страницу с контентом для нового пункта в меню?
3. Как подгрузить всю функциональность плагина для отображения его функционала в новом пункте меню? Например речь идёт о плагине написании пользовательских блогов Frontier-Post, реализованного для вывода в сайдбаре!

Добавить Комментарий

1. Используйте десятки или сотни(например 80 или 280). Придется поэкспериментировать что бы расставить как вам нужно.
2. Данным способом создается вкладка, которую в принципе можно рассматривать как страницу. Уточните, что имеете ввиду.
3. Как вариант найти его шорткод и допустим вместо строки

 echo 'campaigns_active_show';
 

выполнить данных шрткод. Примеры как выполнять его шорткоды можно посмотреть тут и тут

 Если шорткода нет .придется инициализировать нужный функционал с помощью хуков или с помощью вызова функций плагина.

Добавить Комментарий

С упорядочиванием Меню вроде разобрался — поставил номер «21» или «31», «41»  — меню перемещается, но каким образом подгружать контент на страницу, включая внутренне субменю — пока не понимаю.

Есть задача — вывести весь функционал плагина Frontier Post для отображения и редактирования в меню Мой блог в профайле. Вот страничка с шорткодами плагина: http://wpfrontier.com/frontier-post-shortcodes/

На странице плагина стоит шорткод [frontier-post], но следуя вышеописанной инструкции ничего не происходит.

* функции для под меню
// подменю Active
function mb_myblog_active(){
add_action( 'bp_template_content', 'mb_myblog_active_show' );
bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins/frontier-post' ) );
}
function mb_myblog_active_show() {
echo do_shortcode ('[frontier-post]'); 
}

А вот пример «пустой страницы» моего блога в профайле http://friends-magazine.ru/members/friendsmagazine/myblog/

В 6й строке оставьте как в исходнике.
В 9 строке, проверьте не нужны ли шорткоду параметры, например:


[frontier-post frontier_list_all_posts="true" frontier_list_cat_id="3,6" frontier_cat_id="3,6" frontier_return_text="Publish & Go" ]

в 22.09.2015.
Добавить Комментарий

По-прежнему ничего не выводит. Вообще что делает эта строка?

1
bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );

Насколько я понимаю – она подгружает шаблон, созданный плагином?Вот весь код, который я сделал под себя:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
* Добавляем основной пункт меню
 */
 add_action('bp_setup_nav', 'mb_bp_profile_menu_myblog', 301 );
 function mb_bp_profile_menu_myblog() {
 global $bp;
 bp_core_new_nav_item(
 array(
 'name' => 'Мой блог',
 'slug' => 'myblog',
 'position' => 11, //
 'default_subnav_slug' => 'myblog_active', // slug под меню для открытия по умолчанию.
 'screen_function' => 'mb_myblog_active' // функции которая будет срабатывать при переходе по данному пункту меню.
 )
 );
 }
 add_action('bp_setup_nav', 'mb_bp_profile_submenu_myblog', 302 );
 function mb_bp_profile_submenu_myblog() {
 global $bp;
 if(!is_user_logged_in()) return '';
 bp_core_new_subnav_item( array(
 'name' => 'Все посты',
 'slug' => 'myblog_active',
 'parent_url' => $bp->loggedin_user->domain . $bp->bp_nav['profile_myblog']['slug'] . '/' , // ['slug основного пункта меню']['slug']
 'parent_slug' => $bp->bp_nav['profile_myblog']['slug'],
 'position' => 10,
 'screen_function' => 'mb_myblog_active' // функции которая будет срабатывать при переходе по данному пункту меню
 )
 );
 bp_core_new_subnav_item( array(
 'name' => 'Мой блог',
 'slug' => 'myblog_completed',
 'parent_url' => $bp->loggedin_user->domain . $bp->bp_nav['profile_myblog']['slug'] . '/' ,
 'parent_slug' => $bp->bp_nav['profile_myblog']['slug'],
 'position' => 10,
 'screen_function' => 'mb_myblog_completed'
 )
 );
 }
 /*
 * функции для под меню
 */
 // подменю Active
 function mb_myblog_active(){
 add_action( 'bp_template_content', 'mb_myblog_active_show' );
 bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
 //bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'buddypress/members/single/plugins' ) );
 }
 function mb_myblog_active_show() {
 echo do_shortcode ('[frontier-post frontier_list_all_posts="true" frontier_list_cat_id="3,6" frontier_cat_id="3,6" frontier_return_text="Publish & Go" ]');
 }
// подменю Completed
 function mb_myblog_completed(){
 add_action( 'bp_template_content', 'mb_myblog_completed_show' );
 bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) );
 /*bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'buddypress/members/single/plugins' ) );*/
 }
 function mb_myblog_completed_show() {
 echo do_shortcode ('[frontier-post frontier_list_all_posts="true" frontier_list_cat_id="3,6" frontier_cat_id="3,6" frontier_return_text="Publish & Go" ]');
 // echo do_shortcode('[shortcode]'); // Displays a shortcode output.
 }

При добавление шорткода, например

1
echo do_shortcode ('[frontier_post_can_page] ');

На странице он выводится именно так как написан, то есть [frontier_post_can_page] , правильно я понимаю, что шорткоды просто не работаю и не подключаются к данной странице?В настройках плагина указано, что:

Директория шаблонов /home/y/yousto86/friends-magazine.ru/public_html/wp-content/themes/kleo-child/plugins/frontier-post/

В вашем коде, не работают подменю.
В строке 24-25 и 33-34 нужно заменить profile_myblog на myblog.
В комментариях, в коде, я об этом писал.

Еще раз советую просмотреть мой код и проанализировать свой.

в 24.09.2015.
Добавить Комментарий

И почему кстати не отображаются пункты Подменю в созданном Меню? Просто пустая строка…

Добавить Комментарий

Вобщем сейчас немного поэкспериментировал — вставил код с этого сайта, что называется «от балды» в файд functioncs.php

functions.phpfunction pokazat_zapis($parametri) {
 $identifikator_zapisi = intval($parametri['id']);
 $na_akran = '';
 query_posts("p=$identifikator_zapisi");
 if (have_posts()) {
 while (have_posts()) {
 the_post();
 $na_akran .= get_the_content($post->ID);
 }
 }
 wp_reset_query();
 return $na_akran;
 }
add_shortcode("zapis", "pokazat_zapis");

И далее прописал его в строке

 // подменю Active
 function mb_myblog_active_show() {
 echo do_shortcode ('[zapis id="XXXX"]');
 

На странице «Мой блог» стали выводиться посты с текстом и первой фотографией в тексте, если она есть. Хоть какой-то результат)))
Ни ссылок на сами посты, ни загрузка Миниатюр постов не наблюдается!

Вот результат: http://friends-magazine.ru/members/friendsmagazine/myblog/

Нужно реализовать в каждом пункте субменю (которое пока отсутствуют) свои шорткоды — например: 1 Субменю «Все посты» с отображением Миниатюры записи (или первой фото в записи, если миниатюра отсутствует) , кратким анонсом и ссылкой на сам пост. 2 Субменю «Создать новый пост», 3 Субменю «Что-то ещё»

Добавить Комментарий

С подменю разобрался — всё появилось, спасибо! С шорткодами, пока разбираюсь…

Добавить Комментарий

Ребята, есть плагин отличный https://ru.wordpress.org/plugins/buddypress-custom-profile-menu/screenshots/

Добавить Комментарий

Он тупой без настроек, тупо копирует в профиль твое меню, вот так, не советую

Добавить Комментарий

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.