Cum obții data publicării articolului în afara buclei?

19 iun. 2012, 14:43:39
Vizualizări: 60.1K
Voturi: 11

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?

0
Toate răspunsurile la întrebare 4
14
21

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.

19 iun. 2012 15:13:02
Comentarii

Am încercat și get_the_time, dar tot îmi dă data greșită.

dev-jim dev-jim
19 iun. 2012 15:15:19

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

Stephen Harris Stephen Harris
19 iun. 2012 15:20:01

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

Stephen Harris Stephen Harris
19 iun. 2012 15:22:00

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ă.

dev-jim dev-jim
19 iun. 2012 17:04:54

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

Stephen Harris Stephen Harris
19 iun. 2012 17:27:59

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

dev-jim dev-jim
19 iun. 2012 17:50:11

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

Stephen Harris Stephen Harris
19 iun. 2012 18:01:45

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.

Diana Diana
29 iun. 2013 07:47:50

@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 Anagio
21 sept. 2013 02:09:29

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

Maor Barazany Maor Barazany
15 ian. 2014 00:29:28

@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

Stephen Harris Stephen Harris
15 ian. 2014 01:23:58

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!

David Hobs David Hobs
13 iun. 2014 02:30:24

@DavidHobs Rezolvat :)

Stephen Harris Stephen Harris
13 iun. 2014 17:31:10
Arată celelalte 9 comentarii
0

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] =>
)
12 oct. 2018 03:03:26
0

Câteva soluții moderne

Soluția Unu

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

Soluția Doi

<?php the_time(get_option('date_format')) ?>
26 mar. 2018 22:25:38
4
-2

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

19 iun. 2012 15:12:02
Comentarii

Te rog să îmbină răspunsurile tale.

fuxia fuxia
19 iun. 2012 16:17:24

arătă-mi cum să îmbin, te rog?

Dazilio Dazilio
19 iun. 2012 16:29:47

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

fuxia fuxia
19 iun. 2012 16:32:18

Am încercat codurile tale și pot obține valoarea din get_the_time, nu din get_the_date.

dev-jim dev-jim
19 iun. 2012 17:06:26