Домой Wp-Recall WP-Recall: Пишем свое дополнение и кастомизация Выполнение функции из functions.php через rcl_cron
4ответ(ов) в теме
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
1
21:09

Есть код, делающий проверку на непрочитанные сообщения в чате rcl-chat и отправляющий уведомления о непрочитанных сообщениях в ЛК и на почту пользователя. Код работает, если его разместить непосредственно на странице php или вывести через шорткод. Но я не могу понять, как его выполнить при помощи крона из файла functions.php.
Делаю так, код размещаю в файле functions.php:

add_action('rcl_cron_hourly','notify_unread_messages',10);
function notify_unread_messages(){
// проверка на наличие непрочитанных сообщений
//отправка уведомлений о непрочитанных сообщениях
}

Естественно, ничего не срабатывает.
Сам rcl_cron работает как надо, тестировал отправку тестового сообщения на e-mail, код из functions.php:

add_action('rcl_cron_hourly','test_messages',10);
function notify_unread_messages(){
$title = 'Новое сообщение в чате';
    $to = 'admin@admin.ru';
    $mess = '
    <p> Текст сообщения</p>';

    rcl_mail($to, $title, $mess);};}

Кто-нибудь подскажет, как выполнить функцию через rcl_cron на странице php?

0
Вова (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18645
2
21:17

Смотрим описание функции

Вы не можете просматривать опубликованные ссылки

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

Значит у вас проблема внутри функции. Тут посоветовать ничего нельзя - т.к. вы нам ее не показали.

В error.log сервера может есть какая для вас подсказка?

0
Dmitryi
не в сети 4 года
На сайте с 25.06.2016
Участник
Тем 40
Сообщения 104
3
22:07

error.log пустой.
Вот код:

add_action('rcl_cron_hourly','notify_unread_messages',10);
function notify_unread_messages(){
 global $post;
global $wpdb;		
		$post= get_post( $id ); // $id - ID поста	
		$room_chat = 'post-'.get_the_ID().''; 	//id чата	
	
// получаем статус сообщения
   $mes_old_status = $wpdb->get_row($wpdb->prepare(
	"SELECT * FROM `wp_rcl_chat_messages` AS t_mess
LEFT JOIN `wp_rcl_chats` AS t_chat
ON t_chat.chat_id = t_mess.chat_id
WHERE t_chat.chat_room = '$room_chat'
ORDER BY t_mess.message_id DESC
LIMIT 1"
));
$mes_old_status->message_status;
$mes_old_st=$mes_old_status->message_status; // статус последнего сообщения 1- прочитан, 0 - не прочитан

if ($mes_old_st == '0'){
    // id последнего сообщения
$last_message = $wpdb->get_row($wpdb->prepare(
	"SELECT * FROM `wp_rcl_chat_messages` AS t_mess
LEFT JOIN `wp_rcl_chats` AS t_chat
ON t_chat.chat_id = t_mess.chat_id
WHERE t_chat.chat_room = '$room_chat'
ORDER BY t_mess.message_id DESC
LIMIT 1"
));
$last_message->message_id; 
$last_message_new=$last_message->message_id;
//обновление статуса сообщения
$wpdb->update(
            'wp_rcl_chat_messages', 
			array('message_status' => 1),
			array('message_id'=> $last_message_new));
// отправляем уведомление
$args = array(
	'user_id'=>$post ->post_author,
	'notice_subject'=>'Новое сообщение',
	'notice_content'=>'Текст сообщения'
	);    
rcl_add_notification($args);
// отправляем сообщение на почту пользователю
$title = 'Новое сообщение';
    $to = get_the_author_meta('user_email',$post ->post_author);
    $mess = '<p>Текст письма</p>';
    rcl_mail($to, $title, $mess);
 };
};

0
Вова (Otshelnik-Fm)
не в сети 2 дня
На сайте с 27.01.2013
Участник
Тем 43
Сообщения 18645
4
22:18

$post= get_post( $id ); // $id - ID поста	

а $id у вас точно имеет значение?

Тут совет один - дебаг в зубы и построчно дебажте - и увидите на какой строке какая переменная или запрос неверны.
Возможно код в кроне не знает что такое глобальная переменная global $post;

В общем на каждом этапе выполняйте распечатку переменных и ищите.

error_log(print_r($id,true));

- используйте эту функцию. А крон вручную запускайте через плагин Advanced Cron Manager - запуская часовое событие.
А мною указанная функция будет писать в error.log сервера

0
Вы не имеете права на публикацию сообщений в этой теме