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?

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.


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')) ?>

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] =>
)

-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?


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.