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);
m-torin
la source

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);
Rob Vermeer
la source
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"))
JP Lew
la source
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.

kaiser
la source
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
);
m-torin
la source
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é.

Nic Bug
la source