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

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

В данной записи будут описываться примеры кода, решающие мелкие задачи для WordPress плагина WP-Recall. Полезная информация и коллекция ссылок.
Все сниппеты располагаются в файле functions.php вашей активной вордпресс темы.

Ссылки на другие полезные страницы:
Моя группа на этом сайте - где я публикую полезности к плагину.
Все группы - где другие пользователи также предлагают свои решения.
Большой FAQ - Знаете ли вы что… Факты о плагине WP-Recall и единая база для разработки под WP-Recall.
WP-Recall Handbook - Справочник по плагину WP-Recall. Факты, видео, ссылки на руководства для старта разработки под плагин. Дополнение для плагина WP-Recall.
API RCL - раздел сайта с документацией


 

Сниппеты:

  1. Проверяем - активирован плагин WP-Recall или нет
  2. Проверяем - активировано дополнение или нет
  3. Вставим инлайн стили (фильтр)
  4. Подключим свой шаблон
  5. Проверим - что мы в личном кабинете (своём, чужом)
  6. Получить ссылку на личный кабинет авторизованного пользователя
  7. Сформируем ссылку в личный кабинет или вкладку кабинета
  8. Проверим что мы во вкладке Чат
  9. Проверим что мы в дочерней вкладке "Друзья друзей"
  10. Вывод количества непрочитанных сообщений в чате, в любом месте
  11. Удаление рейтинговой активности нужного пользователя
  12. Отменить функцию вывода рейтинга в одиночной записи, и вывести рейтинг записи в нужном месте
  13. Вывести полный рейтинг записи
  14. Вывести блок полного рейтинга автора (или комментатора)
  15. Как отключить область в группах на примере отключения сайдбара групп
  16. Проверить - существует ли область в группах на примере области sidebar
  17. Как после публикации в группе, оставаться на главной странице группы, а не в созданной записи
  18. Получить баланс конкретного пользователя
  19. Изменить баланс конкретного пользователя
  20. Удалим блок автора
  21. Статус пользователя - В сети/не в сети
  22. Расписание, крон задачи (crontab)
  23. Отключим кнопки: "черновик" и "удалить" в типе записей post
  24. Добавим в массив валют новую валюту - Киргизский Сом
  25. Человекопонятное время
  26. Получим ссылку до дополнения

Информация:

  1. Предопределенные константы плагина WP-Recall
  2. Предопределенные стили в админке на странице настроек WP-Recall
  3. Хуки – экшны (actions) и фильтры (filters)
  4. Фильтры вкладок личного кабинета
  5. Настройки WP-Recall в таблице wp_options
  6. Настройки WP-Recall в таблице пользователя wp_usermeta
  7. Имена файлов в корне дополнения (пишем свое дополнение)

Коллекции:

  1. Список шаблонов WP-Recall
  2. js хуки (actions) и фильтры
  3. Отдельная тема по реколлбар и куча сниппетов к нему
  4. Отдельная тема по форме входа и регистрации
  5. Защита от спам регистраций используя функционал Wp-Recall
  6. Глобальные переменные WP-Recall

 


 

 Проверяем - активирован плагин WP-Recall или нет:

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

if(function_exists('wp_recall')){
	// если включен плагин реколл - тут ваш код
}

 


 

 Проверяем - активировано дополнение или нет:

Полезно проверить, если у вас дополнение зависит от, как в примере ниже, рейтинговой системы (уникальный id аддона - имя его папки):

// так проверяем активирован аддон или нет
global $active_addons;
	if(!$active_addons['rating-system']) return false;
	// а тут весь вывод если аддон активен

Или второй вариант:

// или так
global $active_addons;
	if($active_addons['rating-system']){ // если дополнение рейтинга активировано то выполняем
	} else {}

Или третий вариант:

if(rcl_exist_addon('rating-system')){
    // доп активирован
}

- id дополнения - это название папки дополнения
Описание функции rcl_exist_addon
В случае с функцией - если вы размещаете код в functions.php или как отдельный плагин - выполняйте предыдущий сниппет - проверяйте что WP-Recall активирован. Иначе при отключении WP-Recall увидите ошибку о обращении к неизвестной функции. В случае с дополнением - такая проверка не имеет смысла - ведь допы работают только при включенном реколл.


 

 Вставим инлайн стили:

Когда стилей у вашего дополнения мало (1-3 правило), то целесообразности подключать их в отдельный css файл нет. Или если стили формируются у вас динамически - например настройки стилей из настроек админки, то есть смысл подключить их инлайном - т.е. в тело html страницы.

Пример: Добавим инлайн стили в кабинет:
Для этого используем фильтр rcl_inline_styles
Но так как это фильтр, то нам надо возвращать результат при всех проверках, иначе написав return false; - мы затронем другие дополнения использующие этот фильтр.

// добавим инлайн стили реколл в кабинет в хедер
// он удалит сам пробелы, переносы, табуляцию
function my_add_inline_css($styles){
    if(!rcl_is_office()) return $styles; // мы не в кабинете

    $styles .= '
        .some_class {
            box-shadow: 0 0 1px 1px #ddd;
        }
    ';
    return $styles;
}
add_filter('rcl_inline_styles','my_add_inline_css',10);

- при проверке кабинета мы вернули $styles, а ниже - если мы в кабинете, дописали свои стили (конкатенация). Без открывающих и закрывающих тегов style! т.е. как мы их пишем в стилевом файле.
Прелесть этого фильтра - что он сам произведет всю минификацию - сожмет в одну строку и удалит пробелы.


 

 Подключим свой шаблон:

В своем дополнении создайте папку templates
В ней разместите свой php шаблон (к примеру otfm-card.php)
и в своей функции вы можете обратиться к нему так:

$out = rcl_get_include_template('otfm-card.php',__FILE__); // подключим шаблон

Описание rcl_get_include_template
Подключает из вашего аддона из папки:
add-on/our-addon/templates/ шаблон, но предварительно проверяет его наличие по пути:
wp-content/wp-recall/templates/
Если он находит его в пользовательской папке - берет оттуда.

Тогда пользователи смогут воспользоваться функционалом шаблонов WP-Recall


 

 Проверим - что мы в личном кабинете (своём, чужом):

Способ 1:

global $user_LK;
if($user_LK){
    // мы в кабинете
}

// или так:
global $user_ID, $user_LK;
if($user_ID == $user_LK){
    // мы в своем кабинете
}

Способ 2:

if(rcl_is_office()){
    // мы в кабинете
}

// или так:
global $user_ID;
if(rcl_is_office($user_ID)){
    // мы в своем кабинете
}

Эта функция проверяет выводится ли сейчас личный кабинет,
Если передать в нее ИД юзера, то она проверит выводится ли ЛК этого пользователя.

В случае с функцией - если вы код размещаете код в functions.php или как отдельный плагин - проверяйте что WP-Recall активирован (первый сниппет). Иначе при его отключении увидите ошибку о обращении к неизвестной функции. В случае с дополнением - такая проверка не имеет смысла - ведь допы работают только при включенном реколл.


 

<?php 
    global $rcl_user_URL;  // хранит урл до ЛК пример:  
?>
<a href="<?php echo $rcl_user_URL ?>"><i class="fa fa-user"></i><span>Личный кабинет</span></a>

 


 

Учитывает как выводится кабинет (шорткодом или через author.php)

rcl_format_url(get_author_posts_url($user_ID),'forum');

В зависимости от вывода личного кабинета (шорткодом или через author.php) будет формироваться урл
Верно подставляться к вкладке & или ? (&tab=forum или ?tab=forum)

Вернет:
http://across-ocean.otshelnik-fm.ru/account/?user=1&tab=forum
или
http://across-ocean.otshelnik-fm.ru/author/wawan/?tab=forum


 

 Проверим что мы во вкладке Чат:

// проверим что мы в вкладке Чат
global $rcl_tab;

if($rcl_tab->id == 'chat') echo 'мы в вкладке чат';

 


 

Проверим что мы в дочерней вкладке "Друзья друзей":

// Проверим что мы в дочерней вкладке "Друзья друзей"
global $rcl_tab;

if($rcl_tab->active_subtab == 'friends_of_friends') echo 'мы в дочерней вкладке Друзья друзей';

 


 

 Вывод количества непрочитанных сообщений в чате, в любом месте:

if ( is_user_logged_in() ) {
    echo rcl_chat_noread_messages_amount( get_current_user_id() );
}

- функция принимает id пользователя, чье кол-во непрочитанных сообщений нужно получить


 

 Удаление рейтинговой активности нужного пользователя:

Удалить всю рейтинговую активность конкретного пользователя без удаления самого пользователя:

function init_delete_rayt_user(){
    rcl_delete_ratingdata_user(123);
}
add_action('init','init_delete_rayt_user')

Где 123 - идентификатор нужного пользователя.

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


 

 Отменить функцию вывода рейтинга в одиночной записи, и вывести рейтинг записи в нужном месте:

// отменяем рейтинг в конце записи
function remove_filter_post_rayt(){
	if(is_single()){
		remove_filter('the_content', 'rcl_post_content_rating', 10);
	}
}
add_action('wp','remove_filter_post_rayt');

- теперь рейтинг у постов не будет появляться.

Этот хук полезен, когда вы хотите сами вывести рейтинг записи, в нужном вам месте. Для этого используйте функцию:

rcl_get_html_post_rating($post->ID, $post->post_type);

- в нее передаете id пользователя и тип записи

Подробней в этом руководстве "Как вывести форму рейтинга записи / комментария в любом месте?"


 

 Вывести полный рейтинг записи:

echo rcl_get_total_rating($post->ID,'post');
// передаем id записи и тип записи
// вернет число

- описание функции rcl_get_total_rating


 

 Вывести блок полного рейтинга автора (или комментатора):

$rat = rcl_get_user_rating_value(11); 
echo '' . rcl_format_rating($rat) . '';
// вернет html блок: <span class="rating-value rating-plus">48</span>
// т.е. будет указан стиль - нейтральный, положительный или отрицательный рейтинг
// в функцию rcl_get_user_rating_value передаете id автора или комментатора (11)

Или для комментатора вариант 2:

global $comment уже содержит рейтинг - запросов к бд лишних делать не надо:

add_filter('comment_text','add_rating_user_data');
function add_rating_user_data($text){
	global $comment;
	$rating = '<span class="newclass">' . rcl_rating_block(array('value'=>$comment->rating_author)) . '</span>';
	$text = $rating.$text;
	return $text;
}

 


 

add_action('init','rcl_remove_group_sidebar',100);
function rcl_remove_group_sidebar(){
    rcl_remove_group_area('sidebar');
}

Деактивирует сайдбар. Но вы можете указать кроме sidebar - "content" или "footer"


 

 Проверить - существует ли область в группах на примере области sidebar:

if(rcl_is_group_area('sidebar')){...}

- аналогично, кроме sidebar, можете проверять "content" или "footer" область группы


 

 Как после публикации в группе, оставаться на главной странице группы, а не в созданной записи:

add_action('update_post_rcl','redirect_group_after_post',10,3);
function redirect_group_after_post($post_id,$postdata,$update){
       
        //проверяем на редактирование
        if($update) return false;
       
        //проверяем на тип публикации
        if($postdata['post_type']!='post-group') return false;
       
        //получаем ИД группы по ИД публикации
        $group_id = rcl_get_group_id_by_post($post_id);
       
        //получаем ссылку на группу по ИД группы
        $group_url = get_term_link( (int)$group_id, 'groups' );
       
        //редиректим в группу
        wp_redirect($group_url);exit;
}
// использовали экшн "update_post_rcl" из
// wp-content/plugins/wp-recall/add-on/publicpost/rcl_editpost.php

- после публикации в группе - автор будет возвращен в группу


 

 Получить баланс конкретного пользователя:

$balance = rcl_get_user_balance($user_id);

- функция принимает id пользователя
Описание функции rcl_get_user_balance


 

 Изменить баланс конкретного пользователя:

rcl_update_user_balance($balance,$user_id,'Изменение баланса');

$balance - число
$user_id - ИД пользователя
3 аргумент - комментарий к обновлению баланса
Описание функции rcl_update_user_balance


 

 Удалим блок автора:

// Удалим блок автора. Например чтобы потом вывести в другом месте (ниже)
function otfm_remove_author_block(){
	if(!is_admin()){
		remove_filter('the_content', 'rcl_author_info', 70);
	}
}
add_action('wp','otfm_remove_author_block');

И выведем блок автора в нужном нам месте (размещаете в нужном файле)

// вывести блок автора
echo rcl_get_author_block();

Пример 2 - удалим блок автора в публикациях всех групп:

// скрыть автора в публикациях всех групп.
function dd3_remove_author_info_group(){
    global $post;
    if($post->post_type == 'post-group'){
        remove_filter('the_content','rcl_author_info',70);
    }
}
add_action('wp','dd3_remove_author_info_group');

 

Пример 3 - удалим блок автора в записях конкретных групп:

// скрыть в записях конкретных групп?
function dd3_remove_author_info_some_group(){
    if(has_term(9, 'groups')){
        remove_filter('the_content','rcl_author_info',70);
    }
}
add_action('wp','dd3_remove_author_info_some_group', 20);

9 - терм. Получается так https://yadi.sk/i/_z5OKgDt39xa4Q

Пример 4 - удалим блок автора у определенного типа записи:

// уберем у типа записи 'item' блок автора
function dd3_remove_about_author() {
    global $post;
    if ($post && $post->post_type == 'item') { // выбираем где не надо выводить (укажем свой тип записи)
        remove_filter('the_content','rcl_author_info',70);
    }
}
add_filter('wp', 'dd3_remove_about_author', 10);

Пример 5 - удалим блок автора в определенных рубриках


 

 Статус пользователя - В сети/не в сети:

Такст "Не в сети 3 часа". Или значок онлайна:

<?php  
    $action = rcl_get_time_user_action($user_ID); 
    echo rcl_get_miniaction($action);
?>

$user_ID - id нужного юзера.

Пример 2:

надпись "В сети" "Не в сети"

$action = rcl_get_time_user_action($user_ID);
$last_action = rcl_get_useraction($action);
$class = (!$last_action&&$action)?'в сети':'не в сети';
echo $class;

$user_ID - id нужного юзера. А на месте текста можете вывести свои иконки


 

 Расписание, крон задачи (crontab):

Описал здесь
Анонс с 14-й версии реколл

Пример: запустим нашу функцию раз в час

function otfm_one_hour_function(){
    // do stuff
}
add_action('rcl_cron_hourly','otfm_one_hour_function',10);

 


 

 Отключим кнопки: "черновик" и "удалить" в типе записей post:

// отключим кнопки: "черновик" и "удалить" в типе записей post
function dd3_custom_edit_object_public_form($form){
	if($form->post_type!='post') return $form;
	$form->button_draft = false; //удаляем кнопку черновика
    $form->button_delete = false; //удаляем кнопку удаления
	return $form;
}
add_filter('rcl_public_form_object','dd3_custom_edit_object_public_form',10);

 


 

 Добавим в массив валют новую валюту - Киргизский Сом:

для дополнения Recall Commerce

// Добавим в массив валют - Киргизский Сом
function dd3_add_currency($curs){
    $curs['KGZ'] = array('сом','сом','сом');
    return $curs;
}
add_filter('currency_list','dd3_add_currency');

 


 

 Человекопонятное время:

вернет человечное время: 1 минута, 1 час, 17 часов, 5 месяцев, 2 года.

// на вход подаем время вида: 2015-03-07 13:33:16
rcl_human_time_diff($time_action);

 


 

 Получим ссылку до дополнения:

Получить урл нашего дополнения поможет функция rcl_addon_url()
Например получим урл заглушки изображения:

rcl_addon_url('inc/no-image-icon.png',__FILE__)

получим:
http://наш-сайт/wp-content/wp-recall/add-on/наш-доп/inc/no-image-icon.png

 


 

Информация:

 


 

 Предопределенные константы плагина WP-Recall:

RCL_URL - урл до плагина http://ваш-сайт/wp-content/plugins/wp-recall/
RCL_PATH - Полный путь на сервере до папки плагина /home/data/www/ваш-сайт/wp-content/plugins/wp-recall/

RCL_UPLOAD_URL - урл до папки реколл загрузок http://ваш-сайт/wp-content/uploads/rcl-uploads/
RCL_UPLOAD_PATH - Полный путь на сервере до папки реколл загрузок /home/data/www/ваш-сайт/wp-content/uploads/rcl-uploads/

RCL_TAKEPATH - Полный путь на сервере до папки /home/data/www/ваш-сайт/wp-content/wp-recall/

RCL_PREF - префикс бд вашего сайта и реколл. Например wp_rcl_
RMAG_PREF - префикс бд вашего сайта и магазина реколл. Например wp_rmag_

VER_RCL - текущая версия плагина. Например 16.6.7
RCL_SERVICE_HOST - урл до сервисной страницы (обновления, репозиторий) http://downloads.codeseller.ru

p.s. чтобы получить урл нашего дополнения смотрим тут Получим ссылку до дополнения


 

 Предопределенные стили в админке на странице настроек WP-Recall:

Можно использовать для выделения текста в админке сайта - в настройках https://yadi.sk/i/lzyQH5Uh3ETNaY
с версии 14.4 в админке в файле admin.css для разработчиков добавились стили:

.wrap-recall-options .adm_warn {
    color: #d32723;
}
.wrap-recall-options .adm_succ {
    color: #52ae02;
}
.wrap-recall-options .adm_b14 {
    font: bold 14px Arial,Georgia,Verdana;
}
.wrap-recall-options .adm_b16 {
    font: bold 16px Arial,Georgia,Verdana;
}
.wrap-recall-options .adm_b18 {
    font: bold 18px Arial,Georgia,Verdana;
}

т.е. по методологии БЭМ мы можем у аддона указать стиль текста
например:

<div class="adm_warn adm_b16">Наш текст предупреждения</div>

- так мы зададим красный цвет 16 пиксельного болдового шрифта

В админке, для стилизации, вы можете применять набор иконок dashicons https://developer.wordpress.org/resource/dashicons/#dismiss (Включено в вордпресс. Это не реколл)


 

 Хуки – экшны (actions) и фильтры (filters):

// action когда отправляется сообщение:
add_action( 'rcl_new_private_message', 'your_functions', 10, 2 );


// action когда подтверждает регистрацию:
add_action('rcl_confirm_registration','your_functions');

 


 

 Фильтры вкладок личного кабинета:

Позволяют получить данные вкладок личного кабинета и сделать все что нам нужно
Хорошее руководство

add_filter('rcl_tab','my_function'); // фильтр вкладок. Но некоторых дочерних там может не быть
add_filter('rcl_tabs','my_function'); // а вот тут они все
add_filter('rcl_pre_output_tab','my_function'); // а здесь финальный набор вкладок перед выводом (учитывает полномочия - например набор вкладок для гостей)

Смотрим что в них:

function my_function($tab_data){
    var_dump($tab_data);
}

 


 

 Настройки WP-Recall в таблице wp_options:

custom_profile_search_form - настройка поиска аддона profile_search

primary-rmag-options - настройки магазина

rcl_active_addons - данные об активированных дополнениях

rcl_addons_need_update - в массиве аддоны требующие обновления

rcl_cart_fields - данные о созданных полях формы заказа дополнения магазина

rcl_global_options - здесь хранятся все глобальные настройки плагина и его дополнений

rcl_fields_% - данные о созданных произвольных полях формы публикации для различных типов записей, где % - post_type (например rcl_fields_post_1)

rcl-key - ваш rcl-key

rcl_order_tabs - настройка имен вкладок и порядок их сортировки

rcl_profile_default - данные о выводимых дефолтных полях профиля (логин, имя, отображаемое имя, статус (описание))

rcl_profile_fields - созданные произвольные поля профиля и их настройки

rcl_tempgallery - массив временных данных аддона публикации

rcl_version - текущая версия реколл

rcl_active_template - активный wp-recall шаблон

widget_rcl-new-users - виджет новых юзеров
widget_rcl-online-users - виджет кто онлайн
widget_rcl-primary-panel - виджет панели управления
widget_widget-minibasket - виджет корзины

rcl_fields_custom_tabs - массив произвольных вкладок


 

 Настройки WP-Recall в таблице пользователя wp_usermeta:

addons_per_page - количество аддонов на одной странице аддон менеджера админки (по умолчанию 20-ть)

admin_group_% (например admin_group_17) в какой группе админит (старые данные аддона групп. Эти данные аддон груп хранит в своей таблице)

rcl_avatar - строка. хранится путь до аватарки

rcl_cover - строка, хранит путь до обложки кабинета

social_meta_rcl - массив. социальные настройки пользователя

tempgallery - массив временных данных, формы публикации, конкретного пользователя

user_group_% - (например user_group_18) в какой группе состоит (старые данные аддона групп. Эти данные аддон груп хранит в своей таблице)

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


 

 Имена файлов в корне дополнения (пишем свое дополнение):

Каждый addon (дополнение) WP-Recall может содержать следующие файлы:

index.php - обязателен. Основной файл с кодом
info.txt - обязателен. Необходим для описания необходимой информации. Описание
icon.jpg - иконка дополнения. Размеры: 50 пикселей в ширину
activate.php - срабатывает единожды в момент активации дополнения. Например предустановка начальных настроек, создание таблиц в БД
deactivate.php - срабатывает единожды в момент деактивации дополнения.
delete.php - срабатывает единожды в момент удаления дополнения. Подчищаем за собой (правило хорошего тона в программировании)
readme.txt - Разметка readme-файла для товара


 

Коллекции:

 


 

 Список шаблонов WP-Recall:

- все шаблоны плагина WP-Recall собраны здесь


 

 js хуки (actions) и фильтры:

Собрал и описал работу здесь


 

 Отдельная тема по реколлбар и куча сниппетов к нему:

Вынес в отдельную тему. Здесь


 

 Отдельная тема по форме входа и регистрации:

Читаем подробней: Всё о форме входа и регистрации WP-Recall - часть 1
Всё о форме входа и регистрации WP-Recall — часть 2. Шаблоны, хуки, кастомизация


 

 Защита от спам регистраций используя функционал Wp-Recall:

В этой заметке 3 способа


 

Глобальные переменные WP-Recall:

Глобальные переменные плагина собраны тут


 

p.s. Сниппеты будут коллекционироваться тут!

11

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

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

Владимир (Otshelnik-Fm)

4 322
Перегорел
Почитать: https://otshelnik-fm.ru/post-group/goodbye-open-source/
Комментарии: 2206Публикации: 245Регистрация: 27-01-2013Продаж/Покупок: 0/0