Intereting Posts
Ошибка HTTP HTTP: не удалось подключиться к узлу для RSS-каналов в одном домене Есть ли способ добавить местозаполнитель для полей ввода текста WordPress Customizer Пользовательский тип сообщения в теме не отображается Когда использовать wp_schedule_single_event для процессов async / non-blocking? Почему мой вызов ajax обновляет страницу? Почему мой WP Meta Query не возвращает никаких результатов? Предложения для плагина i18n Добавление нескольких изображений на боковую панель страницы 2 Установка WordPress с той же базой данных Как добавить выдержку в содержание на одной странице? Входной ввод формы через переменную URL Как реализовать безопасную загрузку изображений с внешнего интерфейса? Исключить все липкие сообщения на первой странице двадцать двенадцать Как разрешить первому пользователю увидеть версию кэшированного сайта? Скрыть сообщения других пользователей в админ-панели

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 ) );}}} 

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

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