Formatage correct de post_date pour wp_insert_post?


10

Quelle est la bonne façon de définir la date de publication lors de la soumission d'une publication depuis le frontal à l'aide de wp_insert_post ( Trac )?

Mon extrait est maintenant publié avec le temps mysql ...

if (isset ($_POST['date'])) {
    $postdate = $_POST['Y-m-d'];
}
else {
    $postdate = $_POST['2011-12-21'];
}

// ADD THE FORM INPUT TO $new_post ARRAY
$new_post = array(
'post_title'    =>   $title,
'post_content'  =>   $description,
'post_date'     =>   $postdate,
'post_status'   =>   'publish',
'post_parent' => $parent_id,
'post_author' => get_current_user_id(),
);

//SAVE THE POST
$pid = wp_insert_post($new_post);

Réponses:


23

Si vous n'ajoutez pas de post_date, WordPress le remplit automatiquement avec la date et l'heure actuelles.

Définir une autre date et heure [ Y-m-d H:i:s ]est la bonne structure. Un exemple ci-dessous avec votre code.

$postdate = '2010-02-23 18:57:33';

$new_post = array(
   'post_title'    =>   $title,
   'post_content'  =>   $description,
   'post_date'     =>   $postdate,
   'post_status'   =>   'publish',
   'post_parent'   =>   $parent_id,
   'post_author'   =>   get_current_user_id(),
);

//SAVE THE POST
$pid = wp_insert_post($new_post);

Merci Rob! L'ajout $postdate = date('2010-02-23 18:57:33');empêche les boîtes de saisie de fonctionner, mais ce n'est peut-être qu'un bug dans Chrome ...
m-torin

1
Je l'ai essayé moi-même et ça marche. Peut-être que votre problème est ailleurs dans votre code.
Rob Vermeer

J'ai essayé d'utiliser le formatage de cette date, et elle revientNotice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028
Ari

2
devrait être $postdate = '2010-02-23 18:57:33';, car date()nécessite un format de date littéral pour le traitement, pas des nombres. Ou$postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));
Alex K

3

pour convertir votre date au format Wordpress (DATETIME MySQL), essayez ceci:

$date_string = "Sept 11, 2001"; // or any string like "20110911" or "2011-09-11"
// returns: string(13) "Sept 11, 2001"

$date_stamp = strtotime($date_string);
// returns: int(1000166400)

$postdate = date("Y-m-d H:i:s", $date_stamp);
// returns: string(19) "2001-09-11 00:00:00"

$new_post = array(
    // your other arguments
   'post_date'     =>   $postdate
);

$pid = wp_insert_post($new_post);

ou bien sûr si vous voulez vraiment être sexy faites ceci:

'post_date'     => date("Y-m-d H:i:s", strtotime("Sept 11, 2001"))

Ceci est très utile pour formater un horodatage Unix, en particulier le date("Y-m-d H:i:s", $date_stamp)code.
David

2

Vous ne pouvez pas formater $_POST['date']comme ça ... Vous devrez exécuter la valeur à partir $_POST['date']de quelque chose comme $postdate = date( $_POST['date'] )... Il y a aussi la possibilité d'appeler get_option pour les paramètres du blog. Voir Référence des options dans le Codex.


L'utilisation de Date a en fait interrompu la publication et renvoie une erreur 404. Merci Kaiser pour la direction!
m-torin

2

Pour la communauté, voici mon code de travail final:

entête

$year = $_REQUEST['year'];
$month = $_REQUEST['month'];
$day = $_REQUEST['day'];
$postdate =  $year . "-" . $month . "-" . $day . " 08:00:00";

$new_post = array(
    'post_title'    =>  $title,
    'post_content'  =>  $description,
    'post_status'   =>  'publish',
    'post_author'   =>  get_current_user_id(),
    'post_date'     =>  $postdate
);

0

est tombé sur google. je connais son ancien mais il n'y a pas de réponse définitive. le code wordpress utilise current_time( 'mysql' )pour enregistrer la date / l'heure dans la fonction wp_update_post! cela générera le format de date souhaité.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.