Bagaimana cara mendapatkan tanggal posting posting di luar loop?

8

Saya perlu mencabut tanggal publikasi posting agar posting posting otomatis kedaluwarsa. Masalahnya adalah saya tidak bisa mendapatkan tanggal publikasi yang tepat.

Ini kode saya:

 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
}

Ketika saya mengulangi $ postdate, itu keluar dengan tanggal yang salah. Bukan tanggal yang ada di tabel wp_posts.

Bagaimana saya bisa mendapatkan tanggal dengan benar?

dev-jim
sumber

Jawaban:

15

get_the_dateharus digunakan di dalam Loop. Untuk di luar penggunaan loop 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.
}

Pertimbangkan mengganti 'Y-m-d'dalam contoh ini dengan get_option('date_format')karena ini akan menampilkan tanggal sesuai pengaturan format tanggal Anda di wp-admin.

Stephen Harris
sumber
Saya mencoba get_the_time juga, tetapi masih memberi saya tanggal yang salah.
dev-jim
1
Dan Anda memberikan pass ID pos untuk itu? get_the_timeadalah fungsi yang benar untuk digunakan di sini.
Stephen Harris
1
Juga - Anda tidak boleh menggunakan kueri SQL khusus di sini. Gunakan get_postsdan kemudian jika Anda ingin mengekstraksi ID saja, gunakanwp_list_pluck
Stephen Harris
Saya melakukan sesuatu untuk memperbarui post_status berdasarkan tanggal publikasi, apakah ada cara lain untuk memperbarui status? Sejauh ini, query SQL sepertinya cara termudah bagi saya.
dev-jim
1
@DavidHobs Diperbaiki :)
Stephen Harris
1

Beberapa soulions modern

Solusi Satu

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

Solusi Dua

<?php the_time(get_option('date_format')) ?>
Osama Elzero
sumber
0

Anda dapat menggunakan get_post () atau get_post_field () untuk ini, keduanya berfungsi di luar loop.

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

Daftar lengkap nilai yang dikembalikan oleh 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] =>
)
Victor Uria
sumber
-2

coba seperti ini

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

sunting

get_the_time Mengembalikan waktu posting saat ini untuk digunakan dalam PHP. Itu tidak menampilkan waktu. Untuk menampilkan waktu posting, gunakan the_time (). Tag ini harus digunakan dalam The Loop.

get_the_date Tag template get_the_date mengambil tanggal saat $ post ditulis. Tidak seperti the_date () tag ini akan selalu mengembalikan tanggal. Ubah output dengan filter 'get_the_date'.

Apakah saya melewatkan sesuatu di sini?

Gembel Intelek
sumber
Harap gabungkan jawaban Anda.
fuxia
tolong tunjukkan cara menggabungkannya?
Gembel Intelek
Edit jawaban pertama dan salin kode dari yang kedua ke dalamnya. Lalu hapus yang kedua.
fuxia
Saya mencoba kode Anda, dan saya bisa mendapatkan nilai dari get_the_time, bukan get_the_date.
dev-jim