it-swarm-fr.com

Comment définir le statut de publication sur Brouillon s'il est plus ancien qu'aujourd'hui

Dans une question précédente, j'avais besoin de définir un post ultérieur (type de post personnalisé) tel que publié lors de l'enregistrement au lieu de le planifier.

À la date "prévue", j'aimerais à nouveau le brouillon. J'essayais de me connecter à init et de l'envelopper dans un champ en vérifiant le type de message. J'ai pensé qu'il serait comparable à l'heure du serveur, puis définir l'état sur brouillon s'il était plus ancien que l'heure du serveur.

En gros plan:

if custom post type
  get_the_time of post
  get the server time
  if post time is older than server time set status to draft
endif

Ici et mettre à jour avec un code que je travaille avec.

function sfn_show_expire(){
    global $wpdb;
    $server_time = date('mdy');
    $result = $wpdb->get_results("SELECT * FROM wp_posts WHERE post_type = 'show' AND post_status = 'publish'");
    if( !empty($result)) foreach ($result as $a){
        $show_time = get_the_time('mdy', $a->ID );
        if ( $server_time > $show_time){
            $my_post = array();
            $my_post['ID'] = $a->ID;
            $my_post['post_status'] = 'draft';
            wp_update_post( $my_post );
        }
    } // end foreach
}
add_action( 'init', 'sfn_show_expire' );

Il reçoit les messages dont j'ai besoin et me donne le temps de serveur mais ne fait rien au-delà de ce que je peux dire.

2
curtismchale

Votre requête ne vous donne pas un identifiant de post, mais un post entier. Le SELECT * renvoie toutes les colonnes, ID, post_status, etc. Ainsi, définir $my_post['ID'] = $a ne fait rien pour vous dans ce cas.

Essayez d'utiliser: $my_post['id'] = $a->ID; à la place. Cela devrait définir avec précision votre identité avant d'appeler wp_update_post() et vous devriez être en affaires.

En dehors de cela, je ne vois aucun problème avec ce que vous faites ... sauf que l'interrogation de la base de données à chaque chargement du site peut éventuellement créer des problèmes de performances. Je mettrais en place un travail horaire horaire au lieu d'automatiser le processus ... alors cela ne dépend pas du trafic utilisateur ou ne le ralentit pas.

1
EAMann