Как получить дату создания записи?
Поля post_date
и post_date_gmt
содержат дату создания записи. Для отложенных записей это будет дата, на которую запланирована публикация.
Нет надежного встроенного способа определить дату добавления отложенной записи. Для таких записей можно попробовать использовать поля post_modified
или post_modified_gmt
, так как они соответствуют моменту первого добавления записи. Однако это ненадежно, так как эти даты изменяются при редактировании записи.
Еще один (также ненадежный) метод — использовать ревизии. Если ревизии включены, при планировании или публикации записи сохраняется ее ревизия. Эта ревизия, которая сохраняется после нажатия кнопки "Запланировать", будет содержать текущую дату записи на момент нажатия кнопки. Смотрите изображение ниже:
Если вам нужен надежный способ, придется написать собственную функцию для сохранения точного времени нажатия кнопки "Запланировать".

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

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

Мне нужна была та же информация, и я разобрался самостоятельно. Необходимо выполнить кастомный запрос, чтобы получить первую запись _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)
.

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

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

Когда я столкнулся с аналогичной ситуацией, я обнаружил мета-ключ _wp_old_date
с мета-значением, представляющим дату.
Погуглив это, я выяснил, что используется функция для сохранения старого значения, когда Пост или Объект изменяется.
https://wpseek.com/function/wp_check_for_changed_dates/
Я знаю, что это очень поздний ответ, но он может помочь другим в будущем. :)

Я написал запрос на основе других ответов.
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
