web-dev-qa-db-fra.com

Modifier les publications planifiées en publication

J'ai écrit la fonction suivante pour modifier les publications planifiées en publications (j'en ai environ 1000). Lorsque je lance le code ci-dessous, la date change, mais le statut ne change pas ...

Quelqu'un peut-il nous éclairer sur ce problème?

C'est le code que j'utilise à partir de maintenant:

/*  CHANGE PENDING POSTS TO PUBLISHED POSTS */ 
function change_post_status($post_id, $status, $change_date){
    $current_post['ID']          = $post_id;
    $current_post['post_status'] = $status;
    $current_post['post_date']   = $change_date;
    wp_update_post($current_post);
}

$args = array(
    'post_type'      => 'post',
    'posts_per_page' => -1,
    'post_status'    => 'future',
    'orderby'        => 'date',
    'order'          => 'ASC',
);
$the_query = new WP_Query($args);

if ($the_query->have_posts()) {
    $counter = 1;
    while ($the_query->have_posts()) {
        $the_query->the_post();
        $pid = get_the_ID();
        $newdate = date('Y-m-d H:i:s', time() - (3600 * $counter));
        change_post_status($pid, 'publish', $newdate);
        // echo 'TITLE: '.get_the_title()
        //      .' TIME:'.date('Y-m-d H:i:s', time()-(3600 * $counter)).'<br/>';
        $counter++;
    }
}

Toute la chose "une heure avant" que j'ai faite avec la date est correcte - les "futures" publications ont actuellement la date d'hier, mais ont toujours le statut planifié dans la liste des publications.

2
Sagive SEO

Ok, donc lorsque vous essayez de transformer une publication future en publication publiée, vous devez vous rappeler de définir "post_date_gmt" et pas seulement "post_date" à la date souhaitée.

Merci à @gmazzap qui m'a aidé à y arriver ...
Voici un exemple de travail basé sur ma question

/*  CHANGE PENDING POSTS TO PUBLISHED POSTS */ 
function change_post_status($post_id, $status, $change_date){
    $current_post['ID']             = $post_id;
    $current_post['post_status']    = $status;
    $current_post['post_date']      = $change_date;
    $current_post['post_date_gmt']  = $change_date;  // ADDED THIS LINE
    wp_update_post($current_post);
}

$args = array(
    'post_type'      => 'post',
    'posts_per_page' => -1,
    'post_status'    => 'future',
    'orderby'        => 'date',
    'order'          => 'ASC',
);
$the_query = new WP_Query($args);

if ($the_query->have_posts()) {
    $counter = 1;
    while ($the_query->have_posts()) {
        $the_query->the_post();

        $pid        = get_the_ID();
        $newdate    = date('Y-m-d H:i:s', time() - (3600 * $counter));

        change_post_status($pid, 'publish', $newdate);

        // echo 'TITLE: '.get_the_title() .' TIME:'.date('Y-m-d H:i:s', time()-(3600 * $counter)).'<br/>';
        $counter++;
    }
}
2
Sagive SEO