web-dev-qa-db-fra.com

Limiter la longueur du premier extrait de la boucle

Recherché partout mais cela ne semble pas être le cas. Je cherche à définir la longueur des extraits dans la boucle dans functions.php mais j'ai besoin du premier message seulement pour avoir le double des caractères comme reste.

Exemple: le premier message est défini à 60 caractères, les suivants, à 30.

J'ai essayé ça mais ça ne marche pas:

function custom_excerpt_length( $length ) 
{
    static $instance = 0;
    return ( in_the_loop() && 0 == $instance++ ) ? 60 : 30;
}
add_filter( 'excerpt_length', 'custom_excerpt_length' );

Des idées?

1
JPB

Pour déterminer où vous vous trouvez dans la boucle de ce filtre, vous devez accéder à la requête principale globale . Comme ça:

add_filter ('excerpt_length', 'wpse268679_custom_excerpt_length');

function wpse268679_custom_excerpt_length ($length) {
  // access main query
  global $wp_query;
  // do this only for the main loop and the first post in the query
  if (is_main_query() && ($wp_query->current_post == 0))
    $length = 60;
  else
    $length = 30;
  return $length;
  }

Ce qui précède fonctionnera uniquement pour la boucle principale. Si vous avez une boucle locale, vous ne pouvez pas accéder à la requête de manière globale. Vous devrez donc créer votre propre fonction d'extrait, qui transmet la requête à la place de la publication. Ce n'est pas si difficile. Comme ça:

 wpse268679_custom_excerpt ($query) {
   if ($query->current_post == 0)
     $excerpt = wp_trim_words ($query->post->post_excerpt, 60);
   else
     $excerpt = wp_trim_words ($query->post->post_excerpt, 30);
   return $excerpt;
   }

Attention, il faudra peaufiner le réglage ci-dessus, par exemple pour prendre en compte les cas où aucun extrait n'est défini (dans ce cas, vous pouvez utiliser le contenu de la publication pour couper).

0
cjbj