Cómo hacer que los elementos de un tipo de entrada personalizada se eliminen automáticamente 3 meses después de su publicación

20 abr 2012, 20:15:25
Vistas: 2.27K
Votos: 0

Me gustaría un código que pueda colocar en mi archivo functions.php que solo modifique el tipo de entrada personalizada especificado.

Ya he probado varios plugins, pero todos tienen más funciones de las que necesito. Es excesivo lidiar con cosas que no quiero modificar.

Idealmente, el código hará:

  • Configurar un cron job diario para las 00:00 (en la noche)
  • Ejecutar una función personalizada que consulte la base de datos para el tipo de entrada personalizada y compare su fecha de publicación con la fecha actual.
  • Si el tipo de entrada personalizada tiene más de 3 meses (la función personalizada devuelve true), entonces llamará a wp_delete_post() con el ID de la entrada.

Desafortunadamente, no puedo armarlo todo por mí mismo.

¿Hay algún plugin bueno (y simple) que haga esto? ¿O algún fragmento de código que tengas en mente?

0
Todas las respuestas a la pregunta 2
0
add_action( 'wp', 'eliminar_cupones_expirados_diariamente' );
function eliminar_cupones_expirados_diariamente() {
if ( ! wp_next_scheduled( 'eliminar_cupones_expirados' ) ) {
    wp_schedule_event( time(), 'daily', 'eliminar_cupones_expirados');
 }
}
add_action( 'eliminar_cupones_expirados', 'eliminar_cupones_expirados_callback' );
function eliminar_cupones_expirados_callback() {
   $args = array(
    'post_type' => 'coupon',
    'posts_per_page' => -1
);

$coupons = new WP_Query($args);
if ($coupons->have_posts()):
    while($coupons->have_posts()): $coupons->the_post();  
       // obtener la fecha de publicación del post  
       $test = get_the_date();
       // convertirla a strtotime 
       $converter = strtotime($test);
       // añadir 3 meses a la fecha
       $deletedate = date(strtotime("+3 month", $converter));
       // comprobar si la fecha actual es mayor que la fecha de publicación + 3 meses
        if (time() > $deletedate) {
            wp_delete_post(get_the_ID());
            //Usar wp_delete_post(get_the_ID(),true) para eliminar el post también de la papelera                  
        }

    endwhile;
endif; 
}

Coloca esto en functions.php. En teoría esto debería funcionar. Copiado de Posts para expirar (eliminados) después de una fecha y cambiada la comparación.

Cambia el incremento a 3 minutos/segundos para pruebas con

     $test = get_the_date('F j, Y G:i:s');
     $converter = strtotime($test);
     $deletedate = date(strtotime("+3 minutes", $converter));

Usa este plugin para probarlo. https://wordpress.org/plugins/trigger-scheduled-events/

23 dic 2016 17:54:21
0

Bueno, hay dos formas de hacerlo que se me ocurren...

La más simple parece ser el comando wp_cron.

http://codex.wordpress.org/Function_Reference/wp_cron

Y en tus funciones puedes añadir algún SQL personalizado (u otro) para actualizar tu base de datos con lo que quieras...

Alternativamente puedes probar este plugin http://wordpress.org/extend/plugins/wp-cron-control/ y hacer que haga lo que necesitas.

No puedo proporcionar el SQL exacto que necesitas pero con estas dos opciones deberías poder ejecutar eventos programados sin supervisión en tu sitio.

21 jun 2012 18:40:08