web-dev-qa-db-fra.com

Comment obtenir "l'année dernière à partir de [l'année spéc.] Qui contient des messages"?

J'ai une archive de l'année comme ceci:

2010 - - - - - - - - - - 2011 - - - - - - - - - - - 2012

Et tout d’abord, j’ai eu l’idée qu’une année sans publication serait la même page avec le texte "Aucune publication trouvée". Mais j'ai eu des problèmes avec cela car les pages sans contenu redirigent vers 404. Et cela m'a fait comprendre que c'était en fait le meilleur. C'est plus convivial SEO.

Alors j'ai commencé à penser à comment je vais résoudre la situation de pagination. Et eu cette idée, si 2010 n'a pas de messages. Le numéro de cette année sera simplement du texte gris et non un lien. Et la dernière année avec les messages sera le lien précédent. Comme ça:

2009 ... 2010 - - - - - 2011 - - - - - - - - - - - 2012

La question: Comment puis-je trouver le moyen le plus rapide de trouver la dernière année d'une certaine année comportant des publications?

1
Peter Westerlund

Vous pouvez faire une requête pour un seul post publié avant l'année en cours de consultation. Lorsque trié par date en ordre décroissant (par défaut), le premier résultat correspond à l'année la plus récente avec les publications.

$current_year = get_query_var( 'year' );

$previous_posts = get_posts( array(
    'numberposts' => 1,
    'date_query'  => array(
        'year'    => $current_year,
        'compare' => '<',
    ),
) );

if ( ! empty( $previous_posts ) ) {
    $previous_year = get_the_time( 'Y', $previous_posts[0] );
}

Vous pouvez faire la même chose pour obtenir l'année suivante avec les messages, mais vous devez échanger la commande, sinon vous obtiendrez l'année du dernier message. :

$next_posts = get_posts( array(
    'numberposts' => 1,
    'order'       => 'ASC',
    'date_query'  => array(
        'year'    => $current_year,
        'compare' => '>',
    ),
) );

if ( ! empty( $next_posts ) ) {
    $next_year = get_the_time( 'Y', $next_posts[0] );
}
1
Jacob Peattie