Меню: добавление подстраниц в профиле. Часть 1

Одно из распространненых желаний владельцев собственных нишевых социальных сетей – добавить что-либо на страницу профиля своих пользователей. Это может быть мини-фак какой-нибудь (в формате вопросы-ответы) или другая как статическая, так и динамическая информация.

Сделать это очень просто, и я на примере кода и одного из своих плагинов покажу вам и объясню, какие параметры что означают.

Итак, для начала создадим папку /wp-content/mu-plugins/. Эта папка не является deprecated – и не будет в ближайшее время. Она по-прежнему используется с той же логикой, как и в MU (до версии 3.0) – то есть все файлы, которые лежат там в корне, инклудятся в систему и их доступен для использования/манипулирования. Также по-прежнему файлы (или плагины), лежащие там, не требуют активации.

В эту папку мы положим наш php файл, который создаст необходимое нам меню с требуемым содержимым.

Порядок действий

1. Открыть/создать файл example.php с помощью (кодировка – UTF-8 без BOM, синтаксис – PHP).

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

add_action('bp_init', 'example_submenu');
function example_submenu(){
    global $bp;

    $parent = bp_get_friends_slug(); // bp_get_groups_slug()
    $screen = 'example_submenu_page';
    $parent_url = trailingslashit( $bp->loggedin_user->domain . $parent );

    $sub_nav = array(
        'name'            => 'Example',
        'slug'            => 'example',
        'parent_url'      => $parent_url,
        'parent_slug'     => $parent,
        'screen_function' => $screen,
        'position'        => 99,
        'item_css_id'     => 'example',
        'user_has_access' => bp_is_my_profile()
    );
    bp_core_new_subnav_item($sub_nav);
}

Параметры функции bp_core_new_subnav_item():

  • name – имя , ее анкор, по которому вы будете кликать;
  • slug – часть ссылки, которая будет использоваться в url для доступа к странице, обязательно латиницей, допускаются только буквы, цифры, дефис и подчеркивание;
  • parent_url – ссылка на уровень выше в меню (если вы делаете подстраницу к Друзья, то это ссылка на Друзья);
  • parent_slug – последняя часть ссылки меню выше (для Друзья – friends, для Группы – groups и т.д.);
  • screen_function – функция, которая вызывается для отображения контента этой страницы;
  • position – расположение этой ссылки, указанной в name (чем меньше число – тем левее/выше эта ссылка будет отображаться), целое число от 1 до 99 включительно (можно и больше, но нет смысла);
  • item_css_id – id этого подменю, чтобы можно было стилизовать его как вам захочется (background сделать, к примеру);
  • user_has_access – указание того, кто имеет доступ к этой странице. Глобальное правило – функция должна возвращать true или false. Примеры:
    • bp_is_my_profile() – только владелей этого профиля будет видеть эту страницу;
    • is_user_logged_in() – только если пользователь авторизован;
    • is_site_admin() – только админ сайта может видеть эту страницу;
    • true – все будут видеть (в том числе и неавторизованные посетители сайта).

3. Теперь нам надо написать функцию, которая будет выводить контент:

function example_submenu_page() {

	do_action( 'example_submenu_page' );

	bp_core_load_template( apply_filters( 'example_submenu_page', 'members/single/plugins' ) );
}

Здесь мы просто используем стандартный файл plugins.php, который есть внутри темы.
Находится он по адресу: /[theme]/members/single/plugins.php
Не рекомендуется менять его верстку кардинально, так как вы можете тем самым поломать работу других плагинов, которые используют этот файл.

4. Теперь добавим наш собственный контент:

add_action('bp_template_title', 'example_submenu_page_title');
function example_submenu_page_title(){
    echo 'Какой-нибудь ваш заголовок';
}

add_action('bp_template_content', 'example_submenu_page_content');
function example_submenu_page_content(){
    echo 'Здесь может быть любой текст или выводящая что-либо функция';
}

Первая функция example_submenu_page_title() отображает заголовок в h3 теге. Его можно и не использовать, если вам не надо.

Вторая функция example_submenu_page_content() уже обязательна, так как туда вы засовываете то, что увидит конечный пользователь. Это может быть все, что угодно (даже какая-нибудь галерея). Собственно, ради нее весь этот пост и написан :)

Итог

Теперь вы умеете добавлять подменю в профиле пользователя к любому уже существующему меню. Это меню также появляется и в BuddyBar.

В следующей части серии я покажу, как добавлять меню верхнего уровня. Подпишитесь, чтобы не пропустить! А на основе полученных знаний, вы сможете составить иерархию (то есть сделать свои собственные меню с подменю в профиле – любое количество и порядок).


Пожалуйста, подождите. Комментарии загружаются.
Открыть Нечто !