Aggiorna il valore della tassonomia personalizzata per un post in base al campo della data personalizzata

wordpress.stackexchange https://wordpress.stackexchange.com/questions/112404

Domanda

Lettura rapida: Devo aggiornare automaticamente il valore di una tassonomia personalizzata in base a due valori di campo personalizzato (date), il che significa che il post si aggiorna con dover fare clic su "Aggiorna" per modificare il valore.

Dettagli lunghi:Ho creato una nuova tassonomia privata chiamata event_status. I possibili valori sono "apertura_soon", "play_now" e "chiuso".

Questa tassonomia è allegata a un tipo di post personalizzato chiamato "evento". Quando viene creato un post di questo tipo, è presente una serie di campi personalizzati (utilizzando il plug -in Field personalizzato avanzato) che viene compilato. Uno è "data di inizio" e l'altro è "data di fine". Questa è la prima e le ultime esibizioni dell'evento.

Quando viene creato un post di evento, l'event_status tassonomio è impostato su "oping_soon" (poiché l'evento non è ancora avvenuto).

Quello che devo fare è cambiare il valore della tassonomia event_status in base al confronto della data corrente con la data di inizio o fine dell'evento, come impostato tramite campi personalizzati.

Posso capire come farlo agganciandomi a wp_update_post () ma il problema è che voglio che lo stato del post venga aggiornato automaticamente Senza che io debba colpire il "post di aggiornamento" per cambiare. Dovrebbe essere appena cambiato in base alla data corrente. Spero che ci sia un modo per farlo.

In precedenza stavo provando una soluzione con una semplice funzione per determinare lo stato del post, ma presto ho capito che non potevo usare una funzione con cui interrogare (ovviamente) quindi vado per la soluzione tassonomica in modo da poter interrogare per i post da tale.

Ecco la funzione che sto attualmente cercando di lavorare per aggiornare la tassonomia su Save_Post, ma non funziona ancora. La parte inferiore è per eventi che hanno solo una performance (quindi il campo End_Date è vuoto) e le migliori offerte con eventi che hanno una data di inizio e fine.

    //Set post_status based on the current date on wp_update_post()
function set_event_status($post_ID) {
    $start = strtotime(get_field('start_date')); 
    $end = strtotime(get_field('end_date'));
    $now = strtotime('now - 7 hours');
    if ($start && $end) {
        if (($start <= $now) && ($end >= $now)) {
            $status = 'playing_now';
        } elseif ($start >= $now) { 
            $status = 'opening_soon';
        } elseif ($end < $now) {
            $status = 'closed';
        }
    } elseif ($start) {
        if ($start <= $now) {
            $status = 'closed';
        } elseif ($start >= $now) {
            $status = 'opening_soon';
        } elseif ($start == $now) {
            $status = 'playing_now';
        }
    } else {
        $status = 'closed';
    }
    wp_set_post_terms( $post_ID, $status, 'event_status' );

    return $post_ID;
}
add_action( 'save_post', 'set_event_status' );

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a wordpress.stackexchange
scroll top