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

23 дек. 2011 г., 00:55:29
Просмотры: 59.5K
Голосов: 16

Как правильно определить дату публикации при отправке записи с фронтенда с использованием wp_insert_post (Trac)?

Мой код сейчас публикует с mysql временем...

// Проверяем наличие даты в POST запросе
if (isset ($_POST['date'])) {
    $postdate = $_POST['Y-m-d'];
}
else {
    $postdate = $_POST['2011-12-21'];
}

// ДОБАВЛЯЕМ ДАННЫЕ ИЗ ФОРМЫ В МАССИВ $new_post
$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(),
);

// СОХРАНЯЕМ ЗАПИСЬ
$pid = wp_insert_post($new_post);
0
Все ответы на вопрос 5
4
30

Если вы не укажете 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(),
);

// СОХРАНЯЕМ ЗАПИСЬ
$pid = wp_insert_post($new_post);
23 дек. 2011 г. 01:08:25
Комментарии

Спасибо, Роб! Добавление $postdate = date('2010-02-23 18:57:33'); фактически приводит к прекращению работы полей ввода, возможно, это просто баг в Chrome...

MTT MTT
23 дек. 2011 г. 01:17:56

Я сам проверил, и это работает. Возможно, ваша проблема в другой части кода.

Rob Vermeer Rob Vermeer
23 дек. 2011 г. 01:28:50

Я попробовал использовать этот формат даты, но получаю Notice: A non well formed numeric value encountered in C:\xampp\htdocs\wordpress\wp-includes\functions.php on line 4028

Ari Ari
3 нояб. 2013 г. 15:49:07

должно быть $postdate = '2010-02-23 18:57:33';, потому что date() требует точного формата даты для обработки, а не чисел. Или $postdate = date('Y-m-d H:i:s', strtotime('2010-02-23 18:57:33'));

Alex K Alex K
13 янв. 2014 г. 10:32:48
1

для преобразования вашей даты в формат Wordpress (MySQL DATETIME), попробуйте это:

$date_string = "Sept 11, 2001"; // или любая строка вида "20110911" или "2011-09-11"
// возвращает: string(13) "Sept 11, 2001"

$date_stamp = strtotime($date_string);
// возвращает: int(1000166400)

$postdate = date("Y-m-d H:i:s", $date_stamp);
// возвращает: string(19) "2001-09-11 00:00:00"

$new_post = array(
    // другие аргументы
   'post_date'     =>   $postdate
);

$pid = wp_insert_post($new_post);

или, если хотите сделать это более компактно:

'post_date'     => date("Y-m-d H:i:s", strtotime("Sept 11, 2001"))
19 авг. 2013 г. 17:22:54
Комментарии

Это очень полезно для форматирования Unix timestamp, в частности, код date("Y-m-d H:i:s", $date_stamp).

David David
26 сент. 2017 г. 00:26:18
1

Вы не можете форматировать $_POST['date'] таким образом... Вам нужно пропустить значение из $_POST['date'] через что-то вроде $postdate = date( $_POST['date'] )... Также есть возможность вызвать get_option для настроек блога. См. Option Reference в Codex.

23 дек. 2011 г. 13:03:00
Комментарии

Использование Date фактически нарушило публикацию и возвращало ошибку 404. Тем не менее, спасибо Kaiser за указание направления!

MTT MTT
23 дек. 2011 г. 18:17:29
0

Для сообщества представляю мой окончательный рабочий код:

заголовок

$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(), // ID автора записи
    'post_date'     =>  $postdate // дата публикации
);
23 дек. 2011 г. 18:19:27
0

Наткнулся на это через Google. Знаю, что вопрос старый, но точного ответа нет. В WordPress код использует current_time( 'mysql' ) для сохранения даты/времени в функции wp_update_post! Это сгенерирует нужный формат даты.

24 февр. 2020 г. 11:24:36