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 сервера
Вы не имеете права на публикацию сообщений в этой теме