Публикация в группе: Плагин WP-Recall - Личный кабинет на WordPress

Категории группы: Полезное

В этой статье я хочу подробнее рассмотреть, а точнее , рассказать о порядке воздействия на любую выводимую вкладку личного кабинета. Это будет полезно тем пользователям, которые хотят изменять порядок вывода содержимого личного кабинета без изменения кода плагина Wp-Recall.

Начнем с того, что все вкладки личного кабинета создаются (если конечно разработчик дополнения позаботился о этом) по одному принципу:

  1. формируется массив данных вкладки
  2. массив обрабатывается, возвращается контент вкладки
  3. выводим сформированное содержимое вкладки

Каким образом формируется массив данных любой вкладки достаточно подробно описано в описании к функции rcl_tab(). Именно через эту функцию передаются данные необходимые для вывода любой вкладки в личном кабинете. Вся прелесть в том, что эти данные вкладок прежде чем попасть на обработку пропускаются через фильтр 'rcl_tab' благодаря чему мы можем, в любой момент, получить данные нужной нам вкладки еще до вывода и изменить их под свои нужды.

Рассмотрим принцип изменения данных какой-либо вкладки.

Для того, чтобы изменить данные конкретной вкладки личного кабинета нам надо знать ее идентификатор, который передается в функцию rcl_tab() при ее инициализации в дополнении. Можно получить идентификатор вкладки прямо в коде дополнения, а можно воспользоваться панелью браузера и получить его просто узнав уникальный идентификатор кнопки на вывод вкладки в коде страницы. Например, вкладка личного чата имеет идентификатор 'privat', а вкладка групп - 'group'.

Допустим, нам надо каким то образом повлиять на вывод вкладки профиля с идентификатором 'profile'. Для начала получим данные этой вкладки через фильтр rcl_tab:

add_filter('rcl_tab','edit_profile_tab_data');
function edit_profile_tab_data($data){
    if($data['id']!='profile') return $data;
    print_r($data);
}

В результате мы получим примерно такой массив данных вкладки профиля:

array(
    'id'=>'id-tab', //строка, указание идентификатор основной вкладки
    'name'=>'Имя вкладки', //строка, наименование вкладки
    'supports'=>array(), //массив, указание поддерживаемых возможностей, например ajax и cache
    'public'=>1, //указание статуса приватности вкладки
    'icon'=>'fa-book', //класс иконки с сервиса http://fontawesome.io/icons/
    'output'=>'menu', //область вывода кнопки вкладки внутри личного кабинета
    'counters'=>10, //число, счетчик выводимый внутри кнопки на вызов вкладки
    'content'=>array() //массив с данными дочерних вкладок
)

Изменим некоторые данные текущей вкладки:

add_filter('rcl_tab','edit_profile_tab_data');
function edit_profile_tab_data($data){
    if($data['id']!='profile') return $data;
    //изменим иконку на кнопке вкладки, указав нужный класс отсюда http://fontawesome.io/icons/
    $data['icon'] = 'fa-music';
    //сделаем вкладку доступной для всех
    $data['public'] = 1;
    //изменим название вкладки
    $data['name'] = 'Личные данные';
    return $data;
}

Но более полезно будет использовать данную возможность для переназначения функции-обработчика вкладки.
Если вам не нравиться порядок вывода контента внутри вкладки какого то дополнения, то совсем не обязательно писать свое дополнение или лезть в код этого, достаточно просто написать свою функцию с нужным выводом контента и подключить ее, указав имя своей функции в качестве callback-функции для текущей вкладки. Новая функция будет подключена еще до того как отработает прежняя:

add_filter('rcl_tab','edit_profile_tab_data');
function edit_profile_tab_data($data){
    if($data['id']!='profile') return $data;
    $data['content'][0]['callback']['name'] = 'my_custom_function';
    return $data;
}

function my_custom_function($user_lk){
    //содержимое новой функции-обработчика
}

Если мы хотим, чтобы в нашу функцию обработчик также передавались указанные нами аргументы, то указываем также и их:

add_filter('rcl_tab','edit_profile_tab_data');
function edit_profile_tab_data($data){
    if($data['id']!='profile') return $data;
    $data['content'][0]['callback'] = array(
        'name' => 'my_custom_function',
        'args' => array($arg_1,$arg_2)
    );
    return $data;
}

function my_custom_function($arg_1,$arg_2){ 
    //содержимое новой функции-обработчика 
}

В новую функцию будет передаваться идентификатор пользователя чей личный кабинет выводится в данный момент, это может быть полезно для вывода данных через новую функцию. Контент сформированный в новой функции необходимо вернуть для обработки через return.

Таким образом, разместив эту функцию в файле functions.php своего шаблона можно влиять на вывод содержимого любой вкладки личного кабинета.

30

Автор публикации

не в сети 11 часов

Андрей CS

12K
рассматриваю задания
Комментарии: 2742Публикации: 481Регистрация: 30-11--0001Продаж/Покупок: 0/0