Как получить дату публикации поста вне цикла?

8

Мне нужно вытащить дату публикации поста, чтобы сделать пост пост автоматически истекающим. Дело в том, что я не могу получить правильную дату публикации.

Вот мой код:

 global $wpdb;

$post_ids = $wpdb->get_results( "SELECT ID FROM $wpdb->posts WHERE post_status ='publish'" );

foreach($post_ids as $id){

      $postdate = get_the_date("Y-m-d",$id ); //here is what I can figure out
       .......
      ......etc
}

Когда я повторяю $ postdate, получаю неправильную дату. Не дата, которая существует в таблице wp_posts.

Как я могу получить дату правильно?

DEV-джим
источник

Ответы:

15

get_the_dateдолжны быть использованы внутри петли. Для использования вне петли get_the_time.

$posts = get_posts(array('numberposts'=>-1)); //Get all published posts
foreach ($posts as $post){
    echo get_the_time('Y-m-d', $post->ID); //Echos date in Y-m-d format.
}

Попробуйте заменить 'Y-m-d'в этом примере на, get_option('date_format')поскольку при этом будет отображаться дата в соответствии с настройкой формата даты в wp-admin.

Стивен Харрис
источник
Я тоже попробовал get_the_time, но все равно дал мне неправильную дату.
Дев-Джим
1
И вы даете пройти идентификатор сообщения к нему? get_the_timeправильная функция для использования здесь.
Стивен Харрис
1
Кроме того - вы не должны использовать пользовательский запрос SQL здесь. Используйте, get_postsа затем, если вы хотите извлечь только идентификаторы, используйтеwp_list_pluck
Стивен Харрис
Я делаю что-то, чтобы обновить post_status на основе даты публикации, есть ли другой способ обновить статус? Пока что SQL-запрос кажется мне самым простым способом.
Dev-Jim
1
@DavidHobs Исправлено :)
Стивен Харрис
1

Некоторые современные подвиги

Решение первое

<?php echo get_the_date('j F Y', get_the_ID()) ?>

Решение второе

<?php the_time(get_option('date_format')) ?>
Усама Эльзеро
источник
0

Для этого вы можете использовать get_post () или get_post_field () , оба работают вне цикла.

$post_object = get_post($id);
$post_date = date( 'F jS, Y', strtotime( $post_object->post_date ) );

Полный список значений, возвращаемых get_post:

WP_Post Object
(
    [ID] =>
    [post_author] =>
    [post_date] => 
    [post_date_gmt] => 
    [post_content] => 
    [post_title] => 
    [post_excerpt] => 
    [post_status] =>
    [comment_status] =>
    [ping_status] => 
    [post_password] => 
    [post_name] =>
    [to_ping] => 
    [pinged] => 
    [post_modified] => 
    [post_modified_gmt] =>
    [post_content_filtered] => 
    [post_parent] => 
    [guid] => 
    [menu_order] =>
    [post_type] =>
    [post_mime_type] => 
    [comment_count] =>
    [filter] =>
)
Урия Виктор
источник
-2

попробуй вот так

$getPosts = $wpdb->get_results( 
"
    SELECT ID, post_date,post_title
    FROM $wpdb->posts
    WHERE post_status = 'publish' 
        AND post_type = 'post'
        ORDER BY ID ASC
    "
);

foreach ( $getPosts as $myPost ) {
    $id = $myPost->post_date;
    echo $myPost->ID.' | '. $myPost->post_title.' | '. get_the_date("Y-m-d",$id ).'<br />';
}

редактировать

get_the_time Возвращает время текущей записи для использования в PHP. Это не отображает время. Чтобы отобразить время публикации, используйте the_time (). Этот тег должен использоваться в Цикле.

get_the_date Тег шаблона get_the_date извлекает дату написания текущей записи $. В отличие от the_date () этот тег всегда будет возвращать дату. Изменить вывод с помощью фильтра get_the_date.

Я что-то здесь упускаю?

Гембель Интелек
источник
Пожалуйста, объедините ваши ответы.
fuxia
покажи мне как слить, пожалуйста?
Гембель Интелек
Отредактируйте первый ответ и скопируйте в него код второго. Затем удалите второй.
fuxia
Я попробовал ваши коды, и я могу получить значение из get_the_time, а не get_the_date.
Dev-Jim