Come eliminare automaticamente gli articoli di un custom post type dopo 3 mesi dalla pubblicazione?

20 apr 2012, 20:15:25
Visualizzazioni: 2.27K
Voti: 0

Vorrei un codice da inserire nel mio file functions.php che modifichi solo il custom post type specificato.

Ho già provato diversi plugin, ma tutti hanno più funzionalità di quelle che mi servono. È eccessivo usare strumenti che modificano cose che non voglio vengano modificate.

Idealmente, il codice dovrebbe:

  • Impostare un cron job giornaliero per le 00:00 (di notte)
  • Eseguire una funzione personalizzata che interroga il database per il custom post type e confronta la sua data di pubblicazione con la data corrente
  • Se il custom post type è più vecchio di 3 mesi (la funzione personalizzata restituisce true), allora chiamerà wp_delete_post() per l'ID del post

Purtroppo non riesco a mettere tutto insieme da solo.

Esiste un plugin buono (e semplice) che fa questo? O magari un frammento di codice che avete già pronti?

0
Tutte le risposte alla domanda 2
0
add_action( 'wp', 'elimina_coupon_scaduti_giornalmente' );
function elimina_coupon_scaduti_giornalmente() {
if ( ! wp_next_scheduled( 'elimina_coupon_scaduti' ) ) {
    wp_schedule_event( time(), 'daily', 'elimina_coupon_scaduti');
 }
}
add_action( 'elimina_coupon_scaduti', 'elimina_coupon_scaduti_callback' );
function elimina_coupon_scaduti_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();  
       // ottieni la data di pubblicazione del post  
       $test = get_the_date();
       // convertila in timestamp 
       $converter = strtotime($test);
       // aggiungi 3 mesi
       $deletedate = date(strtotime("+3 month", $converter));
       // verifica se oggi è oltre 3 mesi dalla data di pubblicazione
        if (time() > $deletedate) {
            wp_delete_post(get_the_ID());
            //Usa wp_delete_post(get_the_ID(),true) per eliminare il post anche dal cestino.                  
        }

    endwhile;
endif; 
}

Inserisci questo codice nel file functions.php. In teoria questo codice dovrebbe funzionare. Copiato da Post da eliminare dopo una data e modificato il confronto.

Modifica l'incremento a 3 minuti/secondi per testare con

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

Usa questo plugin per testarlo. https://wordpress.org/plugins/trigger-scheduled-events/

23 dic 2016 17:54:21
0

Bene, ci sono due modi per farlo che mi vengono in mente...

Il più semplice sembra essere il comando wp_cron.

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

E nelle tue funzioni puoi aggiungere del codice SQL personalizzato (o altro) per aggiornare il tuo database con ciò che desideri...

In alternativa puoi provare questo plugin http://wordpress.org/extend/plugins/wp-cron-control/ E fargli fare ciò che vuoi.

Non posso fornirti l'SQL esatto di cui hai bisogno ma con questi due strumenti dovresti essere in grado di eseguire eventi programmati non supervisionati sul tuo sito.

21 giu 2012 18:40:08