Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.
Cómo modificar fechas de las entradas de WordPress de forma masiva
30 diciembre, 2024
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.