Для этого урока вы должны знать: что такое шаблоны WP-Recall (templates).
Знания html,css и основы php (понимать синтаксис) - также будут дополнительным плюсом.
Содержание:
- Введение
- Структура файла user-rows.php
- Как убрать статус
- Как убрать счетчики
- Отключим весь блок информации об авторе и выведем всё самостоятельно
- Как дополнить блок автора своим значением без редактирования шаблона?
Введение
В этом уроке мы рассмотрим код и работу с шаблоном user-rows.php, который вы можете найти по адресу:
ваш-сайт/wp-content/plugins/wp-recall/templates/user-rows.php
Этот шаблон используется в шорткоде userlist - выводит список пользователей. И он же используется в блоке автора (после публикации), под записью - имейте это ввиду. Так что если вы его измените - поменяется вывод в обоих местах. Это надо учитывать.
Что будем менять? К примеру вам не нужно выводить всю массу полей профиля, а нужно вывести лишь некоторые поля. Или наоборот - дополнить своими данными. Или что-то скрыть.
Внимание: все действия по изменению шаблона надо проводить при отключенном кешировании WP-Recall. Проверьте что кеш в настройках отключен: "WP-Recall" -> "Настройки" -> "Общие настройки" (галка "Advanced settings" должна быть включена) -> "Кеширование" -> "Кеш" -> "Отключено"
Структура файла user-rows.php
Откроем файл-шаблона и посмотрим что он содержит (кликабельно):
На скриншоте видим, что функция rcl_user_description();
выводит нам всю основную информацию. Поэтому если мы ее уберем - то не увидим ни статуса, ни статистики (счётчики) комментариев и созданных тем и не увидим поля профиля - что выводит плагин и его дополнения.
Внутри этой функции работает хук do_action('rcl_user_description');
- на него функции и вешают свой вывод.
Поэтому если вам нужно что-то вывести под статусом и ниже - используйте этот хук - поменяв лишь его приоритет в 3-м аргументе.
Как убрать статус:
Для этого придется редактировать шаблон. Надо убрать в шаблоне user-rows.php функцию rcl_user_description();
- т.к. она вызывает статус (и в ней же указан вызов хука "rcl_user_description"). Просто замените эту функцию в шаблоне - вызовом хука do_action('rcl_user_description');
- этот экшен вписывать обязательно. Чтобы все функции, что его используют, выводили свои данные.
Как убрать счетчики:
Здесь нам не надо копировать шаблон user-rows.php и вносить в него изменения. Все сниппеты будем вписывать в файл функций вашей активной ВП темы.
Что можем отключить:
Отключим комментарии:
remove_action('rcl_user_description','rcl_user_comments',20);
Отключим публикации:
remove_action('rcl_user_description','rcl_user_posts',20);
Отключим дату регистрации:
remove_action('rcl_user_description','rcl_user_register',20);
Весь блок полей профиля убирается так:
remove_action('rcl_user_description','rcl_user_meta',30);
- вы можете это использовать, если решили переписать только его вывод - убрали этот блок и построили свой вывод со своей версткой и наименованиями.
Важное замечание: если вы в админке: "WP-Recall" -> "Поля профиля" -> "отображать для других пользователей" ставите "Да", только тогда это поле профиля будет выводиться в этом блоке.
Подробнее о полях профиля тут
Большая кастомизация! Выведем всё сами:
Отключим весь блок информации об авторе и выведем всё самостоятельно:
Для этого придется редактировать шаблон. Убирайте вызов функции rcl_user_description();
в шаблоне user-rows.php и выводите любую информацию используя api WordPress.
Но тут вы должны сами отвечать за свои действия - т.к. убрав эту функцию, все поля что дополнения выводили там автоматически - придется вам выводить вручную. Подумайте несколько раз, прежде чем так редактировать шаблон - чтобы потом не приходили на форум за поддержкой и не говорили - "ой, у меня там возраст не выводится" или "награды"...
Для вывода данных о пользователе вы должны знать его метакей - при создании полей профиля в админке вашего сайта meta-key вам уже показан:
В коде шаблона есть две глобальные переменные:
global $rcl_user,$rcl_users_set;
- они уже содержат некоторые данные юзера (данные из полей профиля что созданы - но только при условии что там вы поставили их как "отображать для других пользователей")
Содержимое $rcl_user
stdClass Object ( [ID] => 1 [display_name] => Владимир Otshelnik-Fm [user_registered] => 2011-09-11 17:45:33 [time_action] => 2018-02-10 14:54:51 [description] => Везёт тому - кто сам везёт!! [profile_fields] => Array ( [0] => Array ( [slug] => first_name [value] => Владимир [title] => Имя [type] => text [filter] => ) [29] => Array ( [slug] => interesy_72 [value] => Блекджек и пиковые дамы!! [title] => Интересы [type] => text [filter] => 0 ) [32] => Array ( [slug] => lyubite_muzyku_61 [value] => Array ( [0] => Хард-рок ) [title] => Любите музыку [type] => checkbox [filter] => 1 ) [33] => Array ( [slug] => pol_19 [value] => Мужской [title] => Пол [type] => select [filter] => 1 ) [45] => Array ( [slug] => t_81 [value] => Array ( [0] => c# [1] => lua ) [title] => Языки [type] => multiselect [filter] => 1 ) ) [rating_total] => 48 [posts_count] => 214 [comments_count] => 55 )
- т.е. вы можете уже начать выводить любые из них. Надо лишь чуток знаний по php. Но этот вопрос выходит за рамки этого мануала.
Вторая переменная: $rcl_users_set
содержит не очень интересные данные - если интересно - распечатайте ее и посмотрите ее содержимое.
Те данные, что вы запретили к выводу в админке (настраивая поля профиля) вы можете выводить используя ВП функцию get_user_meta() - там в описании сказано: что вы можете получить все поля у юзера, так и одно, указав точно какое (metakey).
Пример 1:
Нам надо получить пол пользователя - на скриншоте выше у него метакей pol_19
Впишем в шаблон:
<?php echo 'Пол: ' . get_user_meta($rcl_user->ID, 'pol_19', true ); ?>
- незаполненные поля будут пустыми. Вы можете использовать свою верстку, менять свой порядок полей, показывать пустые поля с надписью "не указано" или не выводить их вовсе.
Пример 2:
так можно делать проверку что поле не заполнено и выводить надпись:
<?php $pol = get_user_meta($rcl_user->ID, 'pol_19', true); $text = (!$pol)? 'Не указан': $pol; echo 'Пол: ' . $text; ?>
этот пример показывает как можно при отключенной опции в настройках полей: "отображать для других пользователей" - вписать к выводу любой метакей.
Пример 3:
Получим множественное значение - например у меня в полях это языки программирования которыми владеет пользователь - он может выбрать их несколько к выводу:
У меня Meta-key с именем t_81
Выведем это поле:
<?php $langs = get_user_meta($rcl_user->ID, 't_81'); $langs_separate = ''; if($langs){ $langs_separate = implode(",", $langs[0]); } $lng = (!$langs_separate)? 'Не указано': $langs_separate; echo '<br/>Знаю языки: ' . $lng; ?>
- во второй строке мы не указываем 3-й аргумент - т.к. нам надо получить не одно значение, а массив.
4-я строка - проверка что данные есть.
5-я строка: данные разбиваем разделителем - запятой.
7-я строка - уже знакома нам по прошлому примеру - чтобы указать пустое значение как "Не указано"
Ну и на 8-й строке выводим, вначале выполнив перевод на новую строку.
И мы увидим (включая прошлый вывод) результат:
Пример 4:
Выведем поле только если оно заполнено.
Рассмотрим на примере получения поля профиля "День рождения". Если заполнено - мы его выведем, а если не заполнено - выводить вообще не будем.
<?php $dr = get_user_meta($rcl_user->ID, 'rcl_birthday', true); if($dr) echo '<br/>День рождения: ' . $dr; ?>
- во 3-й строке и проверяем в условии - переменная не пустая - значит выведем. Тут всё просто.
Пример 5. Финальный штрих:
Давайте жирным выведем наши заголовки из 3-х примеров, финальный штрих так сказать
<?php $pol = get_user_meta($rcl_user->ID, 'pol_19', true); $text = (!$pol)? 'Не указан': $pol; echo '<strong>Пол:</strong> ' . $text; ?> <?php $langs = get_user_meta($rcl_user->ID, 't_81'); $langs_separate = ''; if($langs){ $langs_separate = implode(",", $langs[0]); } $lng = (!$langs_separate)? 'Не указано': $langs_separate; echo '<br/><strong>Знаю языки:</strong> ' . $lng; ?> <?php $dr = get_user_meta($rcl_user->ID, 'rcl_birthday', true); if($dr) echo '<br/><strong>День рождения:</strong> ' . $dr; ?>
Результат:
и помните, я говорил что этот же шаблон в блоке автора используется? Вот как там выглядит:
И исходник шаблона выглядит так:
Мы разобрали как действовать: когда мы полностью блок отключали в шаблоне; или как выводить: когда в настройках поля профиля стоит опция "отображать для других пользователей" -> "Нет"
Как дополнить блок автора своим значением без редактирования шаблона?
Тут все просто - оформляете ваш код в функцию, а её вешаете на хук rcl_user_description
. Третий аргумент - установите меньше 10-ти ваш вывод будет выше, передав в него 30-ть выведите в самом низу.
Рассмотрим на примере произвольного поля Интересы:
function otfm_userlist_interesy(){ global $rcl_user; $interes = get_user_meta($rcl_user->ID, 'interesy_72', true); if($interes) echo '<strong>Интересы:</strong> ' . $interes; } add_action('rcl_user_description','otfm_userlist_interesy',30);
- сниппет для файла функций - похожий код мы рассматривали выше.
Результат:
- т.е. указав "30" в последнем аргументе - мы получили вывод в самом низу, после полей профиля.
Надеюсь урок по кастомизации этого шаблона был полезен. Если есть что дополнить - пишите в комментариях.
Если у вас возникли проблемы при работе с этим шаблоном - создавайте новую тему на форуме и ссылайтесь на этот мануал. На форуме будем решать индивидуально что вы делаете и в чем проблема.
Прошу прощения за нелепый вопрос. А можете дать пример к оформление код "Как дополнить блок автора своим значением без редактирования шаблона?"
Т.к. на примере "Интересы" у меня что-то все криво выходит. Просто скрин целого кода и где находится этот фрагмент и как он должен стоять. Еще раз прошу прощения за данный вопрос. И благодарю за помощь
Здравствуйте.
Там дан пример.
Если у вас недостаточно знаний разобраться в нём - обратитесь с заданием https://codeseller.ru/publikaciya-zadaniya/ на доработку под вашу задачу.
Полезная информация. Тем кто не шарит, можно же попробоватб закомментировать ( и потом ниже вписывать, эксперементировать. Если не получится, все удалить, коммент затереть. Или я не прав?
так у вас всегда есть оригинал по стандартному пути - можно и не комментировать. При неудаче или удалить файл шаблона, что скопировали - тогда будет подключаться оригинальный. Или копипастой скопировать из оригинала