4ответ(ов) в теме
Есть код, делающий проверку на непрочитанные сообщения в чате 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?
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);
};
};
$post= get_post( $id ); // $id - ID поста
а $id у вас точно имеет значение?
Тут совет один - дебаг в зубы и построчно дебажте - и увидите на какой строке какая переменная или запрос неверны.
Возможно код в кроне не знает что такое глобальная переменная global $post;
В общем на каждом этапе выполняйте распечатку переменных и ищите.
error_log(print_r($id,true));
- используйте эту функцию. А крон вручную запускайте через плагин Advanced Cron Manager - запуская часовое событие.
А мною указанная функция будет писать в error.log сервера
Вы не имеете права на публикацию сообщений в этой теме