Durante la migración del blog de un cliente, en el feed de entradas de su antigua web, tenía una estructura limitada, con título, imagen destacada y el contenido, pero no tenía la fecha de publicación. Al importar los contenidos a un nuevo WordPress todas las entradas pusieron automáticamente la fecha de la importación. Esto generaba errores de visualización, como en la paginación, que se repetía el mismo post en diferentes páginas al tener todos la misma fecha y hora de publicación.

Pudimos resolverlo con el siguiente código en el archivo functions.php del tema activo. La lógica consiste en que la entrada más reciente se publicará hoy, y el resto irá retrocediendo 7 días sucesivamente:

function update_post_dates_sequentially() {
    // Obtener todas las entradas publicadas
    $args = array(
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => -1, // Obtener todas las entradas
        'orderby'        => 'date',
        'order'          => 'DESC', // Ordenadas de más reciente a más antigua
    );
    $posts = get_posts($args);

    // Fecha inicial (hoy)
    $current_date = current_time('Y-m-d H:i:s');
    $days_offset = 0; // Incremento inicial

    foreach ($posts as $post) {
        // Calcular la nueva fecha para cada entrada
        $new_date = date('Y-m-d H:i:s', strtotime($current_date . " -{$days_offset} days"));

        // Actualizar la fecha de la entrada
        wp_update_post(array(
            'ID'           => $post->ID,
            'post_date'    => $new_date,
            'post_date_gmt' => get_gmt_from_date($new_date),
        ));

        // Incrementar el offset en 7 días para la siguiente entrada
        $days_offset += 7;
    }
}

// Ejecutar una sola vez para evitar que se ejecute en cada carga de página
add_action('init', function () {
    if (isset($_GET['update_post_dates']) && $_GET['update_post_dates'] === '1') {
        update_post_dates_sequentially();
        echo 'Fechas de las entradas actualizadas.';
        exit;
    }
});

Después de pegar el código en el functions deberás ejecutar la siguiente acción:

Accede a tu sitio y añade ?update_post_dates=1 al final de la URL. Por ejemplo: https://tusitio.com?update_post_dates=1

Esto ejecutará la función y actualizará las fechas de las entradas, aparecerá un mensaje de confirmación ‘Fechas de las entradas actualizadas.’

Elimina o comenta el código después de ejecutarlo para evitar que se ejecute accidentalmente.

Compartir en

Relacionados


agencia-marketing-digital
Cómo configurar el slug /blog/ solo para entradas en WordPress y redirigir correctamente

En ocasiones, necesitamos modificar la estructura de enlaces permanentes en WordPress para que solo las entradas del blog tengan el slug /blog/, mientras que el […]

23/02/2024
Añadir campo personalizado a email de WooCommerce

Si utilizas Advanced Custom Fields en WordPress con WooCommerce, es muy posible que utilices algún campo personalizado en cada producto. Si quieres que ese campo […]

Mejorar SEO canonicals Prestashop

Os compartirmos un fragmento de código que mejora el comportamiento de las etiquetas canonical en Prestashop. La etiqueta canonical se utiliza para indicar a los […]