web-dev-qa-db-de.com

Begrenzen Sie die Länge des ersten Ausschnitts in der Schleife

Überall gesucht, aber anscheinend nicht aufgetaucht. Ich versuche, die Länge der Auszüge in der Schleife in functions.php festzulegen, aber ich brauche den ersten Beitrag nur, um die doppelten Zeichen als der Rest zu haben.

Beispiel: 1. Beitrag mit 60 Zeichen, gefolgt von Beitrag mit 30 Zeichen.

Ich habe es versucht, aber es funktioniert nicht:

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

Irgendwelche Ideen?

1
JPB

Um festzustellen, wo Sie sich in der Schleife dieses Filters befinden, müssen Sie auf die globale Hauptabfrage zugreifen . So was:

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;
  }

Das Obige funktioniert nur für die Hauptschleife. Wenn Sie eine lokale Schleife haben, können Sie nicht global auf die Abfrage zugreifen, sodass Sie eine eigene Auszugsfunktion erstellen müssen, die die Abfrage anstelle des Posts übergibt. Das ist nicht so schwer. So was:

 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;
   }

Beachten Sie, dass die obigen Einstellungen angepasst werden müssen, um beispielsweise Fälle zu berücksichtigen, in denen kein Auszug definiert ist (in diesem Fall möchten Sie möglicherweise den Inhalt des Beitrags zum Zuschneiden verwenden).

0
cjbj