Làm thế nào để có được ngày xuất bản bài ngoài vòng lặp?


8

Tôi cần phải rút ngày xuất bản bài đăng để làm cho bài đăng tự động hết hạn. Vấn đề là tôi không thể có được ngày xuất bản đúng.

Đây là mã của tôi:

 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
}

Khi tôi lặp lại $ postdate, nó xuất hiện với một ngày sai. Không phải là ngày tồn tại trong bảng wp_posts.

Làm thế nào tôi có thể có được ngày đúng?

Câu trả lời:


15

get_the_datephải được sử dụng bên trong Loop. Đối với bên ngoài sử dụng vòng lặp 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.
}

Xem xét thay thế 'Y-m-d'trong ví dụ này bằng get_option('date_format')vì điều này sẽ hiển thị ngày theo cài đặt định dạng ngày của bạn trong wp-admin.


Tôi cũng đã thử get_the_time, nhưng vẫn cho tôi ngày sai.
dev-jim

1
Và bạn cung cấp vượt qua ID bài cho nó? get_the_timelà chức năng chính xác để sử dụng ở đây.
Stephen Harris

1
Ngoài ra - bạn không nên sử dụng truy vấn SQL tùy chỉnh tại đây. Sử dụng get_postsvà sau đó nếu bạn chỉ muốn trích xuất ID, hãy sử dụngwp_list_pluck
Stephen Harris

Tôi đang làm gì đó để cập nhật post_status dựa trên ngày xuất bản, có cách nào khác để cập nhật trạng thái không? Cho đến nay, truy vấn SQL dường như là cách dễ nhất với tôi.
dev-jim

1
@DavidHobs Đã sửa :)
Stephen Harris

1

Một số linh hồn hiện đại

Giải pháp một

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

Giải pháp hai

<?php the_time(get_option('date_format')) ?>

0

Bạn có thể sử dụng get_post () hoặc get_post_field () cho việc này, cả hai đều hoạt động bên ngoài vòng lặp.

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

Danh sách đầy đủ các giá trị được trả về bởi 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

thử như thế này

$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 />';
}

biên tập

get_the_time Trả về thời gian của bài đăng hiện tại để sử dụng trong PHP. Nó không hiển thị thời gian. Để hiển thị thời gian của bài đăng, hãy sử dụng the_time (). Thẻ này phải được sử dụng trong Vòng lặp.

get_the_date Thẻ mẫu get_the_date lấy ngày mà bài đăng $ hiện tại được viết. Không giống như the_date () thẻ này sẽ luôn trả về ngày. Sửa đổi đầu ra với bộ lọc 'get_the_date'.

Am i thiếu cái gì ở đây?


Vui lòng hợp nhất câu trả lời của bạn.
fuxia

Làm ơn chỉ cho tôi cách hợp nhất?
Gembel Intelek

Chỉnh sửa câu trả lời đầu tiên và sao chép mã từ câu thứ hai vào đó. Sau đó xóa cái thứ hai.
fuxia

Tôi đã thử mã của bạn và tôi có thể nhận giá trị từ get_the_time, không phải get_the_date.
dev-jim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.