如何获得循环之外的发布日期?


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表中存在的日期。

如何正确获取日期?

Answers:


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,但仍然给我错误的日期。
dev-jim 2012年

1
然后您给它传递帖子ID?get_the_time是在此处使用的正确函数。
史蒂芬·哈里斯

1
另外-您不应在此处使用自定义SQL查询。使用get_posts,然后,如果您只想提取ID,请使用wp_list_pluck
Stephen Harris

我正在根据发布日期进行更新,以更新post_status,还有其他方法可以更新状态吗?到目前为止,SQL查询对我来说似乎是最简单的方法。
dev-jim 2012年

1
@DavidHobs已修复:)
Stephen Harris


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()。此标记必须在The Loop中使用。

get_the_date get_the_date模板标记检索当前$ post的写入日期。与the_date()不同,此标记将始终返回日期。使用“ get_the_date”过滤器修改输出。

我在这里想念什么吗?


请合并您的答案。
fuxia

请告诉我如何合并?
Gembel Intelek'6

编辑第一个答案,然后将第二个答案中的代码复制到其中。然后删除第二个。
fuxia

我尝试了您的代码,但我可以从get_the_time而不是get_the_date获取值。
dev-jim
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.