Пакетное изменение даты постов в WordPress
По мотивам статьи: Пакетное изменение даты для постов DLE написал скрипт который устанавливает дату постов WordPress из заданного диапазона. Таким образом можно раскидать посты в прошлое и будущее (отложенный постинг). Особенно пригодится тем, кто генерирует саттелиты 🙂
Создаем файлик в корне директории WP: www/shuffle-posts.php и добавляем следующее содержимое:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
<?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
После этого, часть постов должна оказаться в прошлом, а часть будет запланирована на будущее.
Комментарии к постам
Я пока не тестил, но должен работать вот такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$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. Я пока его не тестировал, но думаю большинству будет удобнее использовать готовый плагин вместо скрипта.
Author: | Tags: /
| Rating:
9 comments.
Write a comment