Intereting Posts
Как подключиться к процессу регистрации пользователя Перед регистрацией пользователей Проблема с MapPress Easy Google Map в JQuery Tabs Помощь с Wp Query Редактирование метаданных не работает с пользовательским sql Список подкатегорий родительской категории Как группировать элементы навигации в панели администратора Заголовок заголовка вместо динамического текста Нумерация списка изображений в галерее Получить родительские категории пользовательского типа сообщения Добавить параметры для показа изображения Показать комментарии на основе роли пользователя в интерфейсе Код для кнопки выхода из игры Устраняет странный URL-адрес Как можно использовать переменную в качестве имени функции обратного вызова для add_settings_field Необходим метод для base_url () или home_url () в дополнительных настройках CF7 Страница для пользовательского типа сообщения

Как показать реальную дату публикации в черновике

Если посмотреть на черновик сообщения, get_the_date() похоже, возвращает сегодняшнюю дату, а не дату публикации, даже если я выбрал другую дату на экране редактирования сообщений.

Есть ли способ показать «фактическую» дату публикации, которую я выбрал?

Я вижу в базе данных MySQL, что он сохраняется в столбце post_date. Но, как и get_the_date, $post->post_date не возвращает его. Если сообщение представляет собой черновик, оно показывает текущую дату и время.

Да, поскольку вы – до сих пор – не публикуете дату.

Вы можете использовать $post->post_modified , который всегда будет датой последней модификации данных сообщения.


Отлаживать:

Попробуйте подключиться к фильтру и сбросить оба vars:

 function date_dump_callback( $date, $d ) { echo '<pre>'; print_r( $date ); print_r( $d ); echo '</pre>'; return $date; } add_filter( 'get_the_date', 'date_dump_callback', 20, 2 ); 

Я не уверен, почему он изменяет данные, подобные этому при показе, но вы можете использовать

 $post->post_date_gmt 

Это вернет запланированную дату публикации так же, как и в БД, за исключением того, что она находится в формате GMT, поэтому вам может потребоваться сначала преобразовать время в локальный часовой пояс ( это сообщение в блоге может помочь ). В противном случае вы сможете использовать его, как если бы вы использовали дату, а не время, но это зависит от того, что вы делаете с ней.

Редактировать 2/29/12:

Я хотел уточнить свой ответ, чтобы сделать его более полным и дать вам то, что вы действительно можете использовать.

Вы правы, дата публикации хранится в поле post_date в базе данных.

Например, wordpress использует эту строку кода в wp-admin/includes/meta-boxes.php чтобы установить переменную, которая используется для отображения даты публикации для запланированных на будущее проектов:

 $date = date_i18n( $datef, strtotime( $post->post_date ) ); 

Однако при использовании того же кода для отображения на лицевой панели он возвращает текущее время, как вы сказали. Я думаю, мы можем заключить, что данные объекта $post создаются по-разному для передней части.

В любом случае вы можете указать ту же запланированную дату, которую вы установили в admin.

Поскольку кажется, что мы не можем использовать $post->post_date , мы можем использовать $post->post_date_gmt как я уже говорил, – единственный недостаток заключается в том, что ваш часовой пояс, вероятно, не совпадает с GMT. Итак, все, что вам нужно сделать, это вытащить значение GMT ​​и преобразовать его в ваш часовой пояс.

Вы можете добавить эту функцию в свой файл functions.php и вызвать ее там, где хотите:

 <?php /** *@param string $datef (optional) to pass the format you want for the returned date string *@return string */ function get_the_real_post_date($datef = 'M j, Y @ G:i') { global $post; if ( !empty( $timezone_string = get_option( 'timezone_string' ) ) ) { $timezone_object = timezone_open( $timezone_string ); $datetime_object = date_create( $post->post_date_gmt ); $offset_sec = round( timezone_offset_get( $timezone_object, $datetime_object ) ); // if you want $offset_hrs = round( $offset_sec / 3600 ); return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec ); } elseif (!empty( $offset_hrs = get_option('gmt_offset') ) ) { // this option shows empty for me so I believe it's only used by WP pre 3.0 // the option stores an integer value for the time offset in hours $offset_sec = $offset_hrs * 3600; return date_i18n( $datef, strtotime( $post->post_date_gmt ) + $offset_sec ); } else { return; // shouldn't happen but... } } 

Конечно, вы также можете изменить формат времени по умолчанию, который определен в определении параметра, если есть конкретный формат, который вы использовали бы больше всего.

Дайте мне знать, если это сработает для вас. Мне любопытно, для чего вы используете дату?

Вы можете вывести запланированную дату для черновика сообщения, прочитав базу данных с помощью класса wpdb через глобальную переменную $ wpdb, предоставленную Worpdress (см. http://codex.wordpress.org/Class_Reference/wpdb).

Добавьте это в свои функции. Php:

 // function to get scheduled date for draft post function unpublished_draft_date(){ global $wpdb; global $post; $post_id = $post->ID; $draft_date_array = $wpdb->get_results( 'SELECT post_date FROM wp_posts WHERE ID = '.$post_id ); $draft_date = $draft_date_array[0]->post_date; return $draft_date; } 

И это внутри вашего цикла сообщений:

 echo unpublished_draft_date(); 

Я предоставил только базовый код для получения нужной вам даты. Легко сформировать дату, если вам нужно, и ввести идентификатор сообщения в функцию, если вы не хотите использовать текущий идентификатор сообщения или хотите использовать функцию вне цикла.

Пожалуйста, прокомментируйте ниже, если вам нужны более конкретные инструкции.

В моих проектах, $ post-> post_date_gmt только 0000-00-00 00:00:00 – supertrue 4 июня в 15:08

Невозможно изменить дату публикации проекта, который еще не опубликован. Значение post_date_gmt будет 0000-00-00 00:00:00 до публикации публикации.

Убедитесь, что сообщение опубликовано хотя бы один раз. Доступность видимости может быть закрытой, если вы не хотите публиковать ее публично. После публикации вы можете отредактировать дату и сохранить ее как значение для post_date и post_date_gmt на неопределенный срок, если вы не измените ее еще раз. Значения post_modified и post_modified_gmt будут продолжать изменяться при каждом изменении сообщения.

Я протестировал это, и post_date_gmt будет настроен на текущую дату и время после публикации сообщения с видимостью, установленной как конфиденциальная. Вы также можете изменить дату на этом этапе, и ее необходимо обновить.

Если вы можете изменить и сохранить дату на экране редактирования черновика (что вы можете) – supertrue 29/02/12 в 1:36

Нет, вы не можете изменять и сохранять дату на экране редактирования черновика. Перед публикацией проекта эта же область «Publish» exchangeox в редакторе сообщений используется для планирования даты публикации публикации в будущем. Конечно, вы не сможете установить дату или время для планирования, и будущая дата, вероятно, не будет установлена ​​для post_date_gmt, пока она не будет опубликована.