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>' . ' ' . '—' . ' ' . 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)
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>' . ' ' . '—' . ' ' . 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