По мотивам статьи: Пакетное изменение даты для постов DLE написал скрипт который устанавливает дату постов WordPress из заданного диапазона. Таким образом можно раскидать посты в прошлое и будущее (отложенный постинг). Особенно пригодится тем, кто генерирует саттелиты 🙂
Создаем файлик в корне директории WP: www/shuffle-posts.php и добавляем следующее содержимое:
<?php require_once(dirname(__FILE__).'/wp-load.php'); set_time_limit(300); $wpdb->show_errors(); // диапазон раскидывания постов: // от (текущая_дата - $days_minus дней) // до (текущая дата + $days_plus дней) $days_minus = 30; $days_plus = 90; // дальше магия $sql = 'SELECT `ID` FROM `'.$wpdb->prefix.'posts` WHERE `post_type`="post" AND (`post_status`="future" OR `post_status`="publish") '; if ( $posts = $wpdb->get_results($sql) ) { // Меняем дату у постов foreach ($posts as $post) { $sql = 'UPDATE `'.$wpdb->prefix.'posts` SET `post_date`= DATE_ADD( FROM_DAYS( FLOOR( TO_DAYS(NOW()) + (RAND()*'.$days_plus.') - (RAND()*'.$days_minus.') ) ), INTERVAL (FLOOR(RAND()*86400)) SECOND ), `post_date_gmt`=`post_date`, `post_modified`=`post_date`, `post_modified_gmt`=`post_date` WHERE `id`=%d LIMIT 1 '; $psql = $wpdb->prepare($sql, $post->ID); $wpdb->query($psql); } // Обновляем статусы постов $sql = 'UPDATE `'.$wpdb->prefix.'posts` SET `post_status`="future" WHERE `post_date`>NOW() AND `post_type`="post" AND (`post_status`="future" OR `post_status`="publish") '; $wpdb->query($sql); $sql = 'UPDATE `'.$wpdb->prefix.'posts` SET `post_status`="publish" WHERE `post_date`<=NOW() AND `post_type`="post" AND (`post_status`="future" OR `post_status`="publish") '; $wpdb->query($sql); } die('Complete');
Теперь осталось сделать бэкап базы на всякий случай и можно запускать:
http://site.ru/shuffle-posts.php
После этого, часть постов должна оказаться в прошлом, а часть будет запланирована на будущее.
Комментарии к постам
Я пока не тестил, но должен работать вот такой код:
$sql = 'UPDATE `'.$wpdb->prefix.'comments` SET `comment_date` = DATE_ADD( FROM_DAYS( FLOOR( TO_DAYS( (SELECT `post_date` FROM `wp_posts` WHERE `ID`=`wp_comments`.`comment_post_ID`)) + (RAND()*365) )), INTERVAL (FLOOR(RAND()*86400)) SECOND ), `comment_date_gmt` = `comment_date` '; $wpdb->query($sql);
Тут 365 = кол-во дней, прибавляемое к дате поста.
Т.е. "дата_комментария" = "дата_поста" + (от 0 до 365 дней).
Кто проверит отпишите работает ли отложенный постинг для комментариев или нет - будут ли появляться комментарии дата которых больше текущей или они автоматически скроются.
-- [Добавлено 04.10.2018] --
Один из посетителей, у которого не очень прокачанные навыки программирования, сказал что решил свою задачу по изменению дат для постов WordPress, с помощью плагина Post Date Randomizer. Я пока его не тестировал, но думаю большинству будет удобнее использовать готовый плагин вместо скрипта.
Комментарии (8)
Низкий вам поклон!
Все работает, спасибо большое!
коменты не обновляет, последнея версия вордпрес.
может я не туда скрипт вставил? я его добавил к скрипту обновление посто в самый низ. Друг посмотри а..
спасибо за скрипты
привет, могут быть либо ошибки с запросами, либо с самими данными, попробуй перед:
$wpdb->query($sql)
добавить
$wpdb->show_errors()
если ошибок не будет, тогда возьми запрос и выполни его в Adminer или phpmyadmin, посмотри что получится.
ощибка, коменты не хочет обновить
Parse error: syntax error, unexpected ''.$wpdb->prefix.'' (T_CONSTANT_ENCAPSED_STRING) in /home/admin/web/мой сай.ru/public_html/readme.php on line 3
Похоже что, не хватает каких-то кавычек. Вставь в любой редактор с подсветкой синтаксиса, например Notepad++ или онлайн viper-7.com и увидишь где проблема.
Работает , спасибо !
Работает. Большое спасибо!