La corretta formattazione di post_date per wp_insert_post?


10

Qual è il modo corretto di definire la data del post quando si invia un post dal front-end utilizzando wp_insert_post ( Trac )?

Il mio frammento ora sta pubblicando con il mysql time ...

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);

Risposte:


23

Se non aggiungi un post_date, WordPress lo riempie automaticamente con la data e l'ora correnti.

Per impostare un'altra data e ora [ Y-m-d H:i:s ]è la struttura giusta. Un esempio di seguito con il tuo codice.

$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);

Grazie Rob! L'aggiunta in $postdate = date('2010-02-23 18:57:33');realtà fa smettere di funzionare le caselle di input, forse però è solo un bug in Chrome ...
m-torin

1
L'ho provato da solo e funziona. Forse il tuo problema è da qualche altra parte nel tuo codice.
Rob Vermeer,

Ho provato a utilizzare quella data di formattazione e sta tornandoNotice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028
Ari

2
dovrebbe essere $postdate = '2010-02-23 18:57:33';, perché date()richiede un formato data letterale per l'elaborazione, non numeri. Oppure$postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));
Alex K,

3

per convertire la tua data nel formato Wordpress (MySQL DATETIME), prova questo:

$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);

o ovviamente se vuoi essere davvero sexy, fai questo:

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

Questo è molto utile per la formattazione di un timestamp Unix, in particolare il date("Y-m-d H:i:s", $date_stamp)codice.
David,

2

Non puoi formattare in $_POST['date']questo modo ... Dovrai eseguire il valore da $_POST['date']qualcosa come $postdate = date( $_POST['date'] )... C'è anche la possibilità di chiamare get_option per le impostazioni del blog. Vedere l'opzione di riferimento nel codice.


L'utilizzo di Date ha effettivamente interrotto la pubblicazione e restituiva un errore 404. Grazie Kaiser per la direzione però!
m-torin,

2

Per la comunità ecco il mio codice di lavoro finale:

intestazione

$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

imbattuto in google. so che è vecchio ma non esiste una risposta definitiva. Il codice wordpress utilizza current_time( 'mysql' )per salvare la data / ora nella funzione wp_update_post! questo genererà il formato data desiderato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.