В этой статье я хочу подробнее рассмотреть, а точнее , рассказать о порядке воздействия на любую выводимую вкладку личного кабинета. Это будет полезно тем пользователям, которые хотят изменять порядок вывода содержимого личного кабинета без изменения кода плагина Wp-Recall.
Начнем с того, что все вкладки личного кабинета создаются (если конечно разработчик дополнения позаботился о этом) по одному принципу:
- формируется массив данных вкладки
- массив обрабатывается, возвращается контент вкладки
- выводим сформированное содержимое вкладки
Каким образом формируется массив данных любой вкладки достаточно подробно описано в описании к функции 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 своего шаблона можно влиять на вывод содержимого любой вкладки личного кабинета.
Очень полезно! Спасибо, Андрей.
Как вывести дочернею вкладку в вкладке которая уже есть. Например мне надо в вкладке *Баланс* вывести вкладку *курс валют*, подскажите пожалуйста.
Тут есть подробное описание https://codeseller.ru/post-group/wp-recall-15-2-0-dobavlyaem-dochernie-vkladki/