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.
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++;
}
}