Если честно, я не знаю как правильно сформулировать заголовок. Идея сводится вот к чему: имеем Wordpress с установленным плагином BuddyPress, в профиля пользователя вкладки (по-другому, меню профиля), требуется добавить новую вкладку (таб) и сделать ее видимой в профиле только у пользователей с определенной ролью.
Уточняю. Вкладка не скрывается от всех и показывается пользователю с определенной ролью, а показывается в профиле пользователя с определенной ролью. То есть отображение зависит не от роли посетителя, а от роли владельца профиля. Такова задача.
Добавить вкладку
Приступим. Первое, что сделаю — добавлю новую вкладку (таб) на страницу профиля.
function new_tab() {
global $bp;
bp_core_new_nav_item( array(
'name' => __( 'Курсы' ),
'slug' => 'my-courses',
'position' => 80,
'screen_function' => 'new_tab_action',
'show_for_displayed_user' => true,
'item_css_id' => 'my-courses'
) );
}
add_action( 'bp_setup_nav', 'new_tab', 1000 );
Для тех кому нужно просто добавить вкладку с каким-либо содержимым — почти все готово. Осталось описать содержимое вкладки с помощью обозначенной функции new_tab_action. Может быть что угодно: просто текст с картинками, список статей и т.д.
Мне требовалось сделать название вкладки ссылкой на другую страницу, причем адрес страницы должен формироваться динамически. Как пример, предлагаю мое решение:
function new_tab_action() {
$url = '/profile/' . bp_get_displayed_user_username();
bp_core_redirect( site_url( $url ) );
}
Как вы уже поняли, это ссылка на страницу, связанную с пользователем. Я получаю имя пользователя текущего профиля и добавляю к url переадресации.
Отображение вкладки
Вернемся с отображению вкладки. Осталось показать вкладку только на страницах пользователей с определенной ролью. Пусть это будет роль поэта — poet.
if ( user_can ( bp_displayed_user_id(), 'poet' ) )
Вставляю эту проверку в функцию new_tab и получаю ожидаемый результат.
Тут нужно оговориться, что роль поэта должна быть заведена в Wordpress. И к стати, можно проверять не только, так скажем, глобальные роли Wordpress, но и роли BuddyPress (как вы знаете в настройках можно включить такую опцию). Проверить можно следующим образом:
$user_id = bp_displayed_user_id(); - получаем ID владельца просматриваемого профиля
if ( ! bp_has_member_type( $user_id, 'poet' ) ) - проверяем роль пользователя
Вместо заключения, код для вставки контента во вкладку:
function new_tab_action () {
add_action( 'bp_template_title', 'Новая вкладка' );
add_action( 'bp_template_content', 'Содержание. вкладки' );
bp_core_load_template( apply_filters( 'bp_core_template_plugin', 'members/single/plugins' ) ); - подгружаем шаблон
}
Всем удачи!