Comment faire sortir la date de publication du post en dehors de la boucle?

8

Je dois retirer la date de publication du post afin de faire expirer automatiquement le post. Le problème est que je ne peux pas obtenir la bonne date de publication.

Voici mon code:

 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
}

Quand je fais écho à la $ postdate, elle sort avec une mauvaise date. Pas la date qui existe dans la table wp_posts.

Comment puis-je obtenir la date correctement?

dev-jim
la source

Réponses:

15

get_the_datedoit être utilisé à l'intérieur de la boucle. Pour une utilisation en dehors de la boucle 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.
}

Pensez à remplacer 'Y-m-d'dans cet exemple par get_option('date_format')car cela affichera la date selon votre paramètre de format de date dans wp-admin.

Stephen Harris
la source
J'ai également essayé get_the_time, mais je ne donne toujours pas la bonne date.
dev-jim
1
Et vous lui donnez l'ID du message? get_the_timeest la fonction correcte à utiliser ici.
Stephen Harris
1
De plus, vous ne devez pas utiliser de requête SQL personnalisée ici. Utilisez get_postspuis si vous souhaitez extraire uniquement les ID, utilisezwp_list_pluck
Stephen Harris
Je fais quelque chose pour mettre à jour le post_status en fonction de la date de publication, existe-t-il un autre moyen de mettre à jour le statut? Jusqu'à présent, la requête SQL me semble la plus simple.
dev-jim
1
@DavidHobs Fixed :)
Stephen Harris
1

Quelques soultions modernes

Solution un

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

Deuxième solution

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

Vous pouvez utiliser get_post () ou get_post_field () pour cela, les deux fonctionnent en dehors de la boucle.

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

Une liste complète des valeurs renvoyées par 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] =>
)
Uriahs Victor
la source
-2

essayez comme ç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 />';
}

Éditer

get_the_time Renvoie l'heure de la publication actuelle à utiliser en PHP. Il n'affiche pas l'heure. Pour afficher l'heure d'une publication, utilisez the_time (). Cette balise doit être utilisée dans The Loop.

get_the_date La balise de modèle get_the_date récupère la date à laquelle la publication $ actuelle a été écrite. Contrairement à the_date (), cette balise renverra toujours la date. Modifiez la sortie avec le filtre 'get_the_date'.

Est-ce que j'ai râté quelque chose?

Gembel Intelek
la source
Veuillez fusionner vos réponses.
fuxia
montrez-moi comment fusionner, s'il vous plaît?
Gembel Intelek
Modifiez la première réponse et copiez-y le code de la seconde. Supprimez ensuite le second.
fuxia
J'ai essayé vos codes et je peux obtenir la valeur de get_the_time, pas get_the_date.
dev-jim