Как менять дату обновления рандомно на несколько дней назад от текущей

Этот прием необходим для поддержания на сайте видимости активности, а также оказывает некоторое влияние на ИИ оптимизацию сайта.

Данный скрипт позволяет по крон-задаче запускать скрипт, который меняет дату обновления записи wordpress на случайную.
Период кол-ва дней можно регулировать.

Данный скрипт пока что протестирован на шаблоне KADENCE и шаблоне от zaplata.ru – ДЗЕН ВП

1.Добавляем в functions.php



/**
 * Random Post Update Date Modifier (Исправленная версия)
 */

// 1. Гарантированная регистрация крона при каждой загрузке (если еще не зарегистрирован)
add_action('init', 'ensure_random_date_cron_scheduled');
function ensure_random_date_cron_scheduled() {
    if (!wp_next_scheduled('random_update_dates_daily')) {
        wp_schedule_event(time(), 'daily', 'random_update_dates_daily');
    }
}

// 2. Хук выполнения задачи
add_action('random_update_dates_daily', 'execute_random_date_update');

function execute_random_date_update() {
    global $wpdb;
    
    // Путь к файлу лога для проверки работы
    $log_file = WP_CONTENT_DIR . '/cron-date-update.log';
    $log_message = date('Y-m-d H:i:s') . " - Крон запущен. ";
    
    // Получаем ID всех опубликованных записей (только ID, чтобы не грузить память)
    $post_ids = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'post' AND post_status = 'publish'");
    
    if (empty($post_ids)) {
        file_put_contents($log_file, date('Y-m-d H:i:s') . " - Записи не найдены\n", FILE_APPEND);
        return;
    }
    
    $updated_count = 0;
    $today = current_time('timestamp');
    
    // Приостанавливаем обновление кеша для ускорения процесса на шаред-хостинге
    wp_suspend_cache_invalidation(true);
    
    foreach ($post_ids as $post_id) {
        // Генерируем случайное число от 1 до 5 для КАЖДОЙ записи отдельно
        $random_days = wp_rand(1, 3);
        $new_timestamp = $today - ($random_days * DAY_IN_SECONDS);
        
        $new_date = date('Y-m-d H:i:s', $new_timestamp);
        $new_date_gmt = get_gmt_from_date($new_date);
        
        // Прямое обновление в базе данных (самый быстрый и надежный способ)
        $result = $wpdb->update(
            $wpdb->posts,
            array(
                'post_modified'     => $new_date,
                'post_modified_gmt' => $new_date_gmt
            ),
            array('ID' => $post_id),
            array('%s', '%s'),
            array('%d')
        );
        
        if ($result !== false) {
            $updated_count++;
            clean_post_cache($post_id);
        }
    }
    
    // Возвращаем обновление кеша
    wp_suspend_cache_invalidation(false);
    
    // Записываем результат в лог
    $log_message .= "Обновлено записей: {$updated_count} из " . count($post_ids) . "\n";
    file_put_contents($log_file, $log_message, FILE_APPEND);
}

// 3. Кнопка для ручного запуска и проверки (внешний вид в админке)
add_action('admin_menu', 'add_random_date_admin_menu');
function add_random_date_admin_menu() {
    add_management_page(
        'Рандомизация дат записей',
        'Рандомизация дат',
        'manage_options',
        'randomize-post-dates',
        'render_random_date_admin_page'
    );
}

function render_random_date_admin_page() {
    if (isset($_POST['run_date_update_now']) && check_admin_referer('run_date_update_nonce')) {
        execute_random_date_update();
        echo '<div class="notice notice-success is-dismissible"><p>Готово! Даты обновлены. Проверьте файл wp-content/cron-date-update.log</p></div>';
    }
    
    // Читаем последние 5 строк лога для отображения в админке
    $log_file = WP_CONTENT_DIR . '/cron-date-update.log';
    $log_content = file_exists($log_file) ? file_get_contents($log_file) : 'Лог пока пуст.';
    $last_logs = implode("\n", array_slice(explode("\n", trim($log_content)), -5));
    
    ?>
    <div class="wrap">
        <h1>Рандомизация дат обновления записей</h1>
        <p>Этот инструмент изменяет дату модификации (post_modified) всех опубликованных записей на случайную величину от 1 до 5 дней назад от текущего момента.</p>
        
        <form method="post" style="margin-top: 20px;">
            <?php wp_nonce_field('run_date_update_nonce'); ?>
            <input type="submit" name="run_date_update_now" class="button button-primary button-hero" value="Запустить обновление прямо сейчас">
        </form>
        
        <div style="margin-top: 40px; background: #f0f0f1; padding: 15px; border-left: 4px solid #2271b1;">
            <h3>Последние записи из лога выполнения:</h3>
            <pre style="white-space: pre-wrap; font-family: monospace;"><?php echo esc_html($last_logs); ?></pre>
        </div>
    </div>
    <?php
}

В разделе Инструменты – Рандомизация дат
можно теперь в ручную запускать рандом записей обновления

Для автоматической рандомизации я добавляю крон задачу
например каждые 3 дня запуска. крон
т.к. у меня в скрипте условие wp_rand(1, 3); меняет как раз каждые 3 дня дату рандомно.

крон задача:

curl -s 'https://aeoradar.ru/wp-cron.php?doing_wp_cron' >/dev/null 2>&1
guest
Другие сообщения форума
Закрыть меню