Правильне форматування post_date для wp_insert_post?


10

Який правильний спосіб визначити дату публікації під час подання повідомлення з переднього кінця за допомогою wp_insert_post ( Trac )?

Мій фрагмент зараз публікує з часом 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);

Відповіді:


23

Якщо ви не додали post_date, WordPress автоматично заповнює його поточною датою та часом.

Установити іншу дату та час [ Y-m-d H:i:s ]- це правильна структура. Приклад нижче зі своїм кодом.

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

Дякую Роб! Додавання $postdate = date('2010-02-23 18:57:33');фактично змушує вхідні поля перестати функціонувати, можливо, це лише помилка в Chrome, хоча ...
m-torin

1
Я сам спробував це і працює. Можливо, ваша проблема десь в іншому коді.
Роб Вермер

Я спробував скористатися цією формою дати, і вона повертаєтьсяNotice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028
Арі

2
повинно бути $postdate = '2010-02-23 18:57:33';, тому що date()для обробки потрібен буквальний формат дати, а не цифри. Або$postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));
Алекс К

3

щоб перетворити дату у формат Wordpress (MySQL DATETIME), спробуйте:

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

або звичайно, якщо ви хочете по-справжньому бути сексуальною, зробіть це:

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

Це дуже корисно для форматування часової позначки Unix, зокрема date("Y-m-d H:i:s", $date_stamp)коду.
Девід

2

Ви не можете форматувати , $_POST['date']як це ... Ви повинні запустити значення з $_POST['date']через що - щось на зразок $postdate = date( $_POST['date'] )... Там також можливість get_option виклику для налаштування блогу. Див. Довідку щодо варіантів у Codex.


Використання Date фактично порушило публікацію та призведе до помилки 404. Дякую Кайзер за напрямок, хоча!
m-torin

2

Для спільноти ось мій остаточний робочий код:

заголовок

$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

наткнувся через google. Я знаю його старе, але однозначної відповіді немає. Wordpress код використовує current_time( 'mysql' )для збереження дати / часу у функції wp_update_post! це створить потрібний формат дати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.