Cum poți seta ștergerea automată a articolelor dintr-un custom post type după 3 luni de la publicare?
Aș dori un cod pe care să-l pot adăuga în fișierul meu functions.php
și care să modifice doar custom post type-ul specificat.
Am încercat deja mai multe pluginuri, dar toate au mai multe funcții decât am nevoie. Este exagerat să mă complic cu lucruri pe care nu vreau să le modific.
În mod ideal, codul va:
- Seteze un cron job zilnic pentru ora 00:00 (noaptea)
- Să execute o funcție personalizată care să interogheze baza de date pentru custom post type și să compare data publicării cu data curentă.
- Dacă custom post type-ul este mai vechi de 3 luni (funcția personalizată returnează true), atunci va apela
wp_delete_post()
pentru ID-ul postării.
Din păcate, nu reușesc să le pun pe toate cap la cap singur.
Există vreun plugin bun (și simplu) care face asta? Sau poate aveți un fragment de cod la îndemână?

add_action( 'wp', 'delete_expired_coupons_daily' );
function delete_expired_coupons_daily() {
if ( ! wp_next_scheduled( 'delete_expired_coupons' ) ) {
wp_schedule_event( time(), 'daily', 'delete_expired_coupons');
}
}
add_action( 'delete_expired_coupons', 'delete_expired_coupons_callback' );
function delete_expired_coupons_callback() {
$args = array(
'post_type' => 'coupon', // tipul postării
'posts_per_page' => -1 // toate cupoanele
);
$coupons = new WP_Query($args);
if ($coupons->have_posts()):
while($coupons->have_posts()): $coupons->the_post();
// obține data publicării postării
$test = get_the_date();
// convertește la timestamp
$converter = strtotime($test);
// adaugă 3 luni
$deletedate = date(strtotime("+3 month", $converter));
// verifică dacă data curentă este mai mare decât data publicării + 3 luni
if (time() > $deletedate) {
wp_delete_post(get_the_ID());
//Folosește wp_delete_post(get_the_ID(),true) pentru a șterge definitiv din coșul de gunoi
}
endwhile;
endif;
}
Adaugă acest cod în fișierul functions.php. Teoretic, acest cod ar trebui să funcționeze. Am adaptat din Postări care expiră (se șterg) după o anumită dată și am modificat comparația.
Pentru testare, poți modifica incrementul la 3 minute/secunde folosind:
$test = get_the_date('F j, Y G:i:s');
$converter = strtotime($test);
$deletedate = date(strtotime("+3 minutes", $converter));
Folosește acest plugin pentru testare: https://wordpress.org/plugins/trigger-scheduled-events/

Ei bine, există două moduri de a face acest lucru la care mă pot gândi...
Cea mai simplă pare a fi comanda wp_cron.
http://codex.wordpress.org/Function_Reference/wp_cron
Și în funcțiile tale poți adăuga niște SQL personalizat (sau altceva) pentru a-ți actualiza baza de date cu orice dorești...
Alternativ, poți încerca acest plugin http://wordpress.org/extend/plugins/wp-cron-control/ și să-l configurezi să facă ceea ce dorești.
Nu pot furniza exact SQL-ul de care ai nevoie, dar cu aceste două opțiuni ar trebui să poți rula evenimente programate fără supraveghere pe site-ul tău.
