Intereting Posts
как получить все сообщения с одинаковыми мета-сообщениями? Плагин «Easy Table» имеет проблемы с поплавком Остановите мой цикл для регистрации данных дважды Панель инструментов администратора не отображается на всех страницах Является ли плагин WordPress HTTPS безопасным для использования? общий кэш w3 и post__not_in Могу ли я установить класс CSS для таблицы через TinyMCE Не удалось отключить плагин с помощью deactivate_plugins () Ссылка для загрузки последней версии WordPress PLUGIN Почему я получаю ошибку Parse: синтаксическая ошибка, когда я использую 'wp_is_mobile'? Локальный сайт WordPress перенаправляет на общедоступный сайт Отсутствует атрибут родительской страницы Получение значения поля ACF из дочернего сообщения в пользовательской таксономии Приведение кнопки «добавить в корзину» перенаправление на PayPal Как отобразить самый популярный пост по количеству просмотров в WordPress?

Cron при редактировании сообщения

У меня есть блог с несколькими авторами, на котором есть две функции cron schedule. Первая функция перемещает все публичные сообщения в ожидающий статус через 365 дней:

if( ! wp_next_scheduled( 'expire_posts_hook_publish' ) ) { wp_schedule_event( time(), 'hourly', 'expire_posts_hook_publish' ); } add_action( 'expire_posts_hook_publish', 'expire_posts_publish' ); function expire_posts_publish() { global $wpdb; $daystogo = "365"; $sql = "UPDATE {$wpdb->posts} SET post_status = 'pending' WHERE (post_type = 'post' AND post_status = 'publish') AND DATEDIFF(NOW(), post_date) > %d"; $wpdb->query( $wpdb->prepare( $sql, $daystogo ) ); } 

Вторая функция перемещает сообщение в корзину (я имею мусор, установленный на 0 дней, а затем навсегда удаляю) через 395 дней. Если они не отредактированы или не обновлены:

 if ( ! wp_next_scheduled( 'expire_posts_hook' ) ) { wp_schedule_event(time(), 'hourly', 'expire_posts_hook' ); } add_action( 'expire_posts_hook', 'expire_posts' ); function expire_posts() { global $wpdb; $daystogo = "395"; $sql = "UPDATE {$wpdb->posts} SET post_status = 'trash' WHERE (post_type = 'post' AND post_status = 'pending') AND DATEDIFF(NOW(), post_date) > %d"; $wpdb->query( $wpdb->prepare( $sql, $daystogo ) ); } 

Я хотел бы улучшить эту функцию, потому что я боюсь, что если при редактировании сообщения и вы активируете cron одновременно, генерируется ошибка.

В том смысле, что, редактируя сообщение и одновременно активируя функцию cron, после публикации или после обновления он генерирует сообщение об ошибке, которое больше не существует

Есть идеи?

Solutions Collecting From Web of "Cron при редактировании сообщения"

Кажется, он решил, изменив две функции, используя другой подход:

 /* CHECK IF CURRENT USER IS NOT IN POST.PHP AND IN POST-NEW.PHP AND DOWNGRADE PUBLISH POSTS IN PENDING AFTER X DAYS */ if(is_admin() ) {global $pagenow; if( 'post.php' != $pagenow || 'post-new.php' != $pagenow) { add_action( 'init', 'downgrade_publish_posts' ); function downgrade_publish_posts() { $user_ID = get_current_user_id(); global $wpdb; $daystogo = "365"; $sql = "UPDATE {$wpdb->posts} SET post_status = 'pending' WHERE post_type = 'post' AND post_status = 'publish' AND post_author = '$user_ID' AND DATEDIFF(NOW(), post_date) > %d"; $wpdb->query( $wpdb->prepare( $sql, $daystogo ) );}}} /* CHECK IF CURRENT USER IS NOT IN POST.PHP AND IN POST-NEW.PHP AND DELETE PENDING POSTS AFTER X DAYS */ if(is_admin() ) {global $pagenow; if( 'post.php' != $pagenow || 'post-new.php' != $pagenow) { add_action( 'init', 'delete_pending_posts' ); function delete_pending_posts() { $user_ID = get_current_user_id(); global $wpdb; $daystogo = "395"; $sql = "DELETE FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish' AND post_author = '$user_ID' AND DATEDIFF(NOW(), post_date) > %d"; $wpdb->query( $wpdb->prepare( $sql, $daystogo ) );}}} 

Примечание . Очевидно, что в моем случае у меня есть функция, которая заставила дату публикации после ожидания, с текущей датой.

Каждое наблюдение, советы и упрощение приветствуются.