Как получить дату создания записи?

4 февр. 2015 г., 14:33:57
Просмотры: 29.6K
Голосов: 11

Я полагаю, нужно получить первую ревизию конкретной записи и взять её дату, верно?

Как это сделать?

9
Комментарии

post_date и post_date_gmt — это дата создания записи.

Pieter Goosen Pieter Goosen
4 февр. 2015 г. 14:41:39

Спасибо, Pieter, но похоже, что оба поля показывают дату последнего изменения. Ты уверен?

Max Max
4 февр. 2015 г. 14:44:22

Значит, у тебя есть пользовательский фильтр или функция, которая изменяет даты записей. Если запись изменяется, то конкретная дата и время сохраняются как post_modified

Pieter Goosen Pieter Goosen
4 февр. 2015 г. 14:46:57

Извините, но, кажется, это неверно, по крайней мере для запланированных записей: post_date — это запланированная дата. И нет фильтра, я напрямую запрашиваю базу данных, получаю запись и вызываю ->post_date. Есть идеи, как получить самое первое время добавления записи в WordPress?

Max Max
4 февр. 2015 г. 14:58:10

Я только что проверил: получаю post_date из запланированной записи, он возвращает мне запланированную дату. У вас не так?

Max Max
4 февр. 2015 г. 15:20:33

Кажется, я нашел то, что мне нужно (хотя пока не совсем уверен): get_the_time( $date_format, $new_post );

Max Max
4 февр. 2015 г. 15:45:46

кстати, я искал не дату публикации, а дату создания, когда пользователь впервые создал запись в WordPress

Max Max
4 февр. 2015 г. 15:47:35

Упс, не работает, всё равно показывает дату публикации или запланированную дату, если пост запланирован... Странно!

Max Max
4 февр. 2015 г. 15:55:59

Что вы уже закодили сами? Также ваш вопрос не совсем понятен.

Brad Dalton Brad Dalton
4 февр. 2015 г. 20:00:32
Показать остальные 4 комментариев
Все ответы на вопрос 5
4
10

Поля post_date и post_date_gmt содержат дату создания записи. Для отложенных записей это будет дата, на которую запланирована публикация.

Нет надежного встроенного способа определить дату добавления отложенной записи. Для таких записей можно попробовать использовать поля post_modified или post_modified_gmt, так как они соответствуют моменту первого добавления записи. Однако это ненадежно, так как эти даты изменяются при редактировании записи.

Еще один (также ненадежный) метод — использовать ревизии. Если ревизии включены, при планировании или публикации записи сохраняется ее ревизия. Эта ревизия, которая сохраняется после нажатия кнопки "Запланировать", будет содержать текущую дату записи на момент нажатия кнопки. Смотрите изображение ниже:

Изображение с примером ревизий

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

4 февр. 2015 г. 19:55:23
Комментарии

Спасибо, но это странно, такой функции нет

Max Max
27 февр. 2015 г. 11:32:17

Действительно ли необходима такая функция? Ваш случай очень специфический

Pieter Goosen Pieter Goosen
27 февр. 2015 г. 11:41:17

Не думаю, что случай настолько специфический, особенно теперь, когда в игре woocommerce и нужно различать возраст товаров

Kirby Kirby
15 июл. 2015 г. 23:05:19

@Kirby пожалуйста, объясни в ответе

Pieter Goosen Pieter Goosen
15 июл. 2015 г. 23:34:18
1

Мне нужна была та же информация, и я разобрался самостоятельно. Необходимо выполнить кастомный запрос, чтобы получить первую запись _wp_old_date из таблицы postmeta, как предложил @dipak_pusti. Запустите следующий запрос:

global $wpdb;
$post_id = 1234;
$meta_key = '_wp_old_date';
$post_create_date = $wpdb->get_var( $wpdb->prepare(
    "
        SELECT MIN($wpdb->postmeta.meta_value) as post_create_date
        FROM $wpdb->postmeta
        WHERE $wpdb->postmeta.post_id = %d
            AND $wpdb->postmeta.meta_key = %s
    ",
    $post_id,
    $meta_key
) );

if(is_null($post_create_date)) {
    $post_create_date = get_the_date('Y-m-d', $post_id);
}

echo "<p>Дата создания записи: {$post_create_date}</p>";

Примечание: Если _wp_old_date равен NULL (это означает, что дата публикации никогда не менялась), можно использовать дату из get_the_date('Y-m-d', $post_id).

25 янв. 2019 г. 19:26:44
Комментарии

Я считаю, что это можно упростить, вызвав get_post_meta( $post_id, '_wp_old_date' );, убедившись, что не передаётся значение true в качестве третьего параметра. В результате будет получен массив значений для проверки, что избавляет от необходимости SQL-запроса. В качестве бонуса используется кеш WP, поэтому если у вас уже есть объект поста, дополнительные запросы вообще не выполняются

Tom J Nowell Tom J Nowell
31 окт. 2019 г. 00:06:09
0

Используйте get_the_date(); для получения даты, указанной в метабоксе "Опубликовать" в поле "Опубликовано ..". Обычно это дата создания записи пользователем, если он не изменил её.

4 февр. 2015 г. 16:59:25
0

Когда я столкнулся с аналогичной ситуацией, я обнаружил мета-ключ _wp_old_date с мета-значением, представляющим дату.

Погуглив это, я выяснил, что используется функция для сохранения старого значения, когда Пост или Объект изменяется.

https://wpseek.com/function/wp_check_for_changed_dates/

Я знаю, что это очень поздний ответ, но он может помочь другим в будущем. :)

1 авг. 2018 г. 14:45:54
0

Я написал запрос на основе других ответов.

SELECT p.post_title, 
       (SELECT Min(postmeta.meta_value) 
        FROM   wp_postmeta postmeta 
        WHERE  postmeta.post_id = p.id 
               AND postmeta.meta_key = '_wp_old_date') 
       "Первая публикация из postmeta", 
       DATE(revisions.min_post_modified) 
       "Первое редактирование в ревизиях", 
       DATE(revisions.min_post_date)                   min_post_date 
FROM   wp_posts p, 
       (SELECT post_parent, 
               Min(pr.post_modified) min_post_modified, 
               Min(pr.post_date)     min_post_date 
        FROM   wp_posts pr 
        GROUP  BY pr.post_parent) revisions 
WHERE  p.id = revisions.post_parent 
31 окт. 2019 г. 20:23:26