Intereting Posts
Ошибка js на странице редактирования сообщений Создание настраиваемой разбивки на страницы для многостраничного сообщения в блоге Скрыть панель управления от пользователей, не являющихся администраторами Разрешить незарегистрированным пользователям просматривать будущую запись после нажатия на список будущих сообщений Как вводить контент после <body> Копировать / Переместить выбранные таксономические термины в другую таксономию для должностей Как связать 2 настраиваемых поля вместе (например, дата и цена)? Любой плагин там, где используется внутренний загрузчик изображений WP? Как исключить страницы из результатов поиска Поиск пользовательских типов и таксономических сообщений Изображение не отображается в области успеха медиа-загрузчика – отслеживание Добавление короткого кода для обмена сообщениями «paypal accept payment» в моем пользовательском типе почтового типа Не удалось получить доступ к панели мониторинга субдомена Изменение сообщений об ошибках входа в систему Показать только сообщения автора в панели инструментов панели всех сообщений

Код для автоматического истечения срока действия сообщений через 30 дней

Я пробовал плагины, которые доступны в разделе плагинов WordPress, но они, похоже, терпят неудачу. Первоначально я использовал функцию автоповторения Expire By User Role, которая работала какое-то время, но по какой-то причине сейчас это не так.

Я хочу добавить код в functions.php, который будет автоматически задан как черновики сообщений, которые на 30 дней старше их опубликованной даты.

У меня есть следующий код, но не знаю, является ли это тот, который я должен использовать. Правильно ли это, а если нет, то какая форма?

 function expire_posts () {
 глобальный $ wpdb;
 $ daystogo = "30";
 $ sql = "UPDATE wp_posts SET` post_status` = 'draft' WHERE `post_type` = 'post' И DATEDIFF (NOW (),` post_date`)> '$ daystogo') ";
 }

 add_action ('wp_head', 'expire_posts');

Solutions Collecting From Web of "Код для автоматического истечения срока действия сообщений через 30 дней"

Вы только что объявили запрос, но вы его не выполнили!

function expire_posts() { global $wpdb; $daystogo = "30"; $sql = "UPDATE wp_posts SET `post_status` = 'draft' WHERE `post_type` = 'post' AND DATEDIFF(NOW(), `post_date`) > '$daystogo')"; $wpdb->query( $sql ); } 

Не забудьте всегда готовить свои запросы .

Также было бы неплохо использовать wp_cron() для запуска кода в обычное время inverval (например, один раз в день). При подключении к wp_head запрос будет запускаться каждый раз, когда пользователь посещает страницу.

В вашем запросе есть некоторые проблемы

 $daystogo = "30"; $sql = "UPDATE {$wpdb->posts} SET post_status = 'draft' WHERE (post_type = 'post' AND post_status = 'publish') AND DATEDIFF(NOW(), post_date) > %d"; $wpdb->query( $wpdb->prepare( $sql, $daystogo ) ); 

Вы не хотите, чтобы нераскрытые треснутые сообщения объявляли их как проект, не так ли? И вы действительно не хотите делать каждую автоматическую сохраненную версию (post_status = inherit) черновик. Поэтому выбирайте только опубликованные сообщения.

Используйте $wpdb-prepare() для КАЖДОГО запроса.

(Изменить: каждый запрос с переменными входами, то есть. Не используйте готово для полностью статических запросов, не имеющих переменных входных данных.)

Используйте WPDB класса WPDB вместо имени простой таблицы $wpdb->posts вместо wp_posts . См. Кодекс .

Сначала проверьте свой запрос перед их кодом. Используйте что-то вроде внешнего интерфейса MySQL или MySQL-Admin . В вашем sql-запросе есть a ) в конце, где никто не должен быть.