Как в профиле пользователя 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" ]
По-прежнему ничего не выводит. Вообще что делает эта строка?
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.
В комментариях, в коде, я об этом писал.
Еще раз советую просмотреть мой код и проанализировать свой.
И почему кстати не отображаются пункты Подменю в созданном Меню? Просто пустая строка…
Вобщем сейчас немного поэкспериментировал — вставил код с этого сайта, что называется «от балды» в файд 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/
Он тупой без настроек, тупо копирует в профиль твое меню, вот так, не советую