Cum obții data publicării articolului în afara buclei?
Am nevoie să extrag data publicării articolului pentru a face articolul să expire automat. Problema este că nu pot obține data corectă de publicare.
Iată codul meu:
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 ); //aici este ceea ce am putut să implementez
.......
......etc
}
Când afișez $postdate, apare o dată greșită. Nu este data care există în tabelul wp_posts.
Cum pot obține data corect?

get_the_date
trebuie utilizat în cadrul Loop-ului. Pentru utilizare în afara Loop-ului, folosiți get_the_time
.
$posts = get_posts(array('numberposts'=>-1)); //Obține toate articolele publicate
foreach ($posts as $post){
echo get_the_time('Y-m-d', $post->ID); //Afișează data în formatul Y-m-d.
}
Luați în considerare înlocuirea 'Y-m-d'
din acest exemplu cu get_option('date_format')
, deoarece acest lucru va afișa data conform setărilor formatului de dată din wp-admin.

Și ai trecut ID-ul postării către el? get_the_time
este funcția corectă de utilizat aici.

De asemenea - nu ar trebui să folosești o interogare SQL personalizată aici. Folosește get_posts
și apoi, dacă vrei să extragi doar ID-urile, folosește wp_list_pluck

Fac ceva pentru a actualiza post_status pe baza datei de publicare, există vreo altă metodă de a actualiza statusul? Până acum, interogarea SQL mi se pare cea mai ușoară variantă.

Vezi modificările - aproape niciodată nu ar trebui să interoghezi baza de date direct.

Înțeles punctul tău. Am încercat și funcționează perfect. Dar aș vrea să știu de ce nu ar trebui să interoghez baza de date direct? Din motive de securitate?

Securitate (oarecum), performanță (probabil), dar în principal simplitatea codului și compatibilitatea în viitor - adică utilizarea API-ului furnizat (get_post
) în acest caz.

Mulțumesc Stephen, nu știam că pot trece un ID> Când folosești get_posts, nu există nicio modalitate de a afișa data postării fără acesta.

@StephenHarris în timp ce această funcție obține data la care a fost creat postul, este posibil să obții data/ora modificării în afara buclei?

@Anagio - vezi http://wordpress.stackexchange.com/questions/95769/get-date-of-last-update-outside-of-loop/115044#115044

Conform Codex, tag-ul get_the_time
trebuie utilizat în cadrul Loop-ului. http://codex.wordpress.org/Function_Reference/get_the_time

@MaorBarazany, se pare că codex-ul are greșeli, vezi sursa: https://core.trac.wordpress.org/browser/tags/3.8/src/wp-includes/general-template.php#L1497

Ați legat de get_post_time în loc de get_the_time, ceea ce este destul de confuz. Ambele realizează același lucru, dar au argumente diferite. Aveți vreo șansă să remediați linkul? Mulțumesc!

Poți folosi get_post() sau get_post_field() pentru aceasta, ambele funcționează în afara loop-ului.
$post_object = get_post($id);
$post_date = date( 'F jS, Y', strtotime( $post_object->post_date ) );
O listă completă a valorilor returnate de 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] =>
)

încearcă așa
$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 />';
}
editează
get_the_time Returnează ora postării curente pentru utilizare în PHP. Nu afișează ora. Pentru a afișa ora unei postări, folosește the_time(). Acest tag trebuie utilizat în cadrul Loop-ului.
get_the_date Tag-ul get_the_date returnează data la care a fost scris postul curent $post. Spre deosebire de the_date(), acest tag va returna întotdeauna data. Poți modifica ieșirea cu filtrul 'get_the_date'.
Mi-e ceva care îmi scapă aici?

Editează primul răspuns și copiază codul din al doilea în el. Apoi șterge al doilea.
