¿Formateo correcto de post_date para wp_insert_post?

10

¿Cuál es la forma correcta de definir la fecha de publicación al enviar una publicación desde el front-end usando wp_insert_post ( Trac )?

Mi fragmento ahora está publicando con el tiempo 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
fuente

Respuestas:

23

Si no agrega un post_date, WordPress lo llena automáticamente con la fecha y hora actuales.

Establecer otra fecha y hora [ Y-m-d H:i:s ]es la estructura correcta. Un ejemplo a continuación con su código.

$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
fuente
Gracias Rob! Añadiendo $postdate = date('2010-02-23 18:57:33');en realidad hace que las cajas de entrada dejan de funcionar, tal vez eso es sólo un error en Chrome, aunque ...
m-Torin
1
Lo he intentado yo mismo y funciona. Quizás su problema esté en otra parte de su código.
Rob Vermeer
Intenté usar ese formato de fecha, y está regresandoNotice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028
Ari
2
debe ser $postdate = '2010-02-23 18:57:33';, porque date()requiere formato de fecha literal para procesar, no números. O bien$postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));
Alex K
3

para convertir su fecha al formato Wordpress (MySQL DATETIME), intente esto:

$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, por supuesto, si quieres ser realmente sexy, haz esto:

'post_date'     => date("Y-m-d H:i:s", strtotime("Sept 11, 2001"))
JP Lew
fuente
Esto es muy útil para formatear una marca de tiempo Unix, específicamente el date("Y-m-d H:i:s", $date_stamp)código.
David
2

No puede formatear de $_POST['date']esta manera ... Tendrá que ejecutar el valor a $_POST['date']través de algo como $postdate = date( $_POST['date'] )... También existe la posibilidad de llamar a get_option para la configuración del blog. Ver Opción de referencia en el Codex.

emperador
fuente
El uso de Date realmente rompió la publicación y devolvería un error 404. ¡Gracias Kaiser por la dirección!
m-torin
2

Para la comunidad aquí está mi código de trabajo final:

encabezamiento

$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
fuente
0

encontré a través de google. Sé que es viejo pero no hay una respuesta definitiva. ¡El código de WordPress se usa current_time( 'mysql' )para guardar la fecha / hora en la función wp_update_post! Esto generará el formato de fecha deseado.

Nic Bug
fuente