Come eliminare automaticamente gli articoli di un custom post type dopo 3 mesi dalla pubblicazione?
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?

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/

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.
