Публикация в группе: Otshelnik-Fm - мои работы (код, плагины, дополнения, статьи и руководства)

Категории группы: Работаем с Wp-Recall

Для этого урока вы должны знать: что такое шаблоны WP-Recall (templates).
Знания html,css и основы 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" в последнем аргументе - мы получили вывод в самом низу, после полей профиля.


Надеюсь урок по кастомизации этого шаблона был полезен. Если есть что дополнить - пишите в комментариях.

Если у вас возникли проблемы при работе с этим шаблоном - создавайте новую тему на форуме и ссылайтесь на этот мануал. На форуме будем решать индивидуально что вы делаете и в чем проблема.

9

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

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

Вова (Otshelnik-Fm)

4 503
Живой, бодрый, полон идей!
Комментарии: 2252Публикации: 250Регистрация: 27-01-2013Продаж/Покупок: 0/0