web-dev-qa-db-fra.com

Pourquoi get_the_time ('F j') renvoie-t-il le 30 novembre pour tous les articles?

Bon, alors je crée la page de blog pour mon site WordPress. Ma page d'accueil est affichée sous forme statique, de sorte que mes articles de blog sont sur une autre page appelée "Journal". Je veux afficher les articles sous forme d'archives. J'essaie d'atteindre les objectifs suivants:

J'ai cherché comment faire cela et j'ai trouvé un moyen; cependant, les dates de tous les articles sont affichées sous la forme "30 novembre".

C'est le code que j'utilise:

                <?php
                // Get years that have posts
                $years = $wpdb->get_results( "SELECT YEAR(post_date) AS year FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' GROUP BY year ASC" );

                //  For each year, do the following
                foreach ( $years as $year ) {

                    // Get all posts for the year
                    $posts_this_year = $wpdb->get_results( "SELECT ID, post_title FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' AND YEAR(post_date) = '" . $year->year . "'" );

                    // Display the year as a header
                    echo '<h1>' . $year->year . '</h1>';

                    // Start an unorder list
                    echo '<ul class="posts-in-year">';

                    // For each post for that year, do the following
                    foreach ( $posts_this_year as $post ) {
                        // Display the title as a hyperlinked list item
                        echo '<li><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a>' . ' ' . '&mdash;' . ' ' .  get_the_time('F j') . '</li>';
                    }

                    // End the unordered list
                    echo '</ul>';
                }
                ?> 

Essentiellement, j'essaie d'obtenir l'heure de chaque message et d'afficher son mois et son jour (F j)

3
Matthew

La fonction get_the_time est uniquement conçue pour fonctionner dans la boucle principale de WordPress ou dans une boucle personnalisée utilisant WP_Query. La façon dont vous l'utilisez ne fonctionnera donc pas correctement. Voici la bonne façon de l'utiliser, en utilisant une boucle WP_Query personnalisée:

<?php
// Get years that have posts
$years = $wpdb->get_results( "SELECT DISTINCT YEAR(post_date) AS year FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY year ASC;" );

//  For each year, do the following
foreach ( $years as $year ) {    
    // Get all posts for the year.  Using WP_Query instead of custom mySQL
    $posts_this_year = new WP_Query( array(
        'post_type' => 'post',
        'post_status' => 'publish',
        'year' => $year->year
    ) );    

    // Display the year as a header
    echo '<h1>' . $year->year . '</h1>';

    // Start an unorder list
    echo '<ul class="posts-in-year">';

    // As long as you have posts for that year, do the following.  Using the Loop.  get_the_date now works
    while ( $posts_this_year->have_posts() ) {
        //Makes current post available to template tag functions like get_the_time
        $posts_this_year->the_post(); 
        // Display the title as a hyperlinked list item
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a>' . ' ' . '&mdash;' . ' ' .  get_the_time('F j') . '</li>';
    }

    //Reset post data.  Important to do this so not to mess with main loop
    wp_reset_postdata();

    // End the unordered list
    echo '</ul>';
}

?>

La boucle, à laquelle je faisais référence précédemment, est lorsque vous utilisez WP_Query pour parcourir les publications à votre place. Lorsque vous procédez ainsi, les fonctions telles que get_the_time fonctionnent correctement car elles peuvent extraire les informations de la publication en cours dans la boucle. Pour plus d'informations, lisez les données du codex sur WP_Query et plusieurs boucles

6
Manny Fleurmond