it-swarm.com.de

Wie steuere ich die manuelle Auszugslänge?

Ich habe eine Website, auf der ich die angezeigte Auszugslänge steuern muss. Einige der Posts haben möglicherweise einen manuellen Auszug, sodass ich den excerpt_length-Filter nicht verwenden kann.

Ich kann natürlich eine Art von substr() verwenden, habe aber nach einer eleganteren Lösung gesucht (falls es eine solche gibt).

6
hannit cohen

Schauen Sie sich meine Antwort hier an: Beste Sammlung von Code für Ihre functions.php-Datei

Wenn ich Ihre Frage richtig verstanden habe, tut sie, wonach Sie suchen.

Fügen Sie dies in functions.php ein:

function excerpt($num) {
    $limit = $num+1;
    $excerpt = explode(' ', get_the_excerpt(), $limit);
    array_pop($excerpt);
    $excerpt = implode(" ",$excerpt)."... (<a href='" .get_permalink($post->ID) ." '>Read more</a>)";
    echo $excerpt;
}

Verwenden Sie dann in Ihrem Thema den Code <?php excerpt('22'); ?>, um den Auszug auf 22 Zeichen zu beschränken.

:)

6
Martin-Al

Mit der Aktuelle Version von Wordpress (v.3.3.0 +) können Sie tatsächlich wp_trim_words verwenden.

function excerpt($limit) {
    return wp_trim_words(get_the_excerpt(), $limit);
}

Siehe auch: https://stackoverflow.com/a/17177847/851045

6
Giraldi

Ich würde sagen, schauen Sie sich nur an, wie der Kern funktioniert: http://phpxref.ftwr.co.uk/wordpress/wp-includes/formatting.php.source.html#l1840

Ich habe mir erlaubt, den Code hier einzufügen, um das Kopieren und Einfügen zu vereinfachen.

global $post;
if( empty($post->post_excerpt) ){
  $text = apply_filters( 'the_excerpt', get_the_excerpt() );
} else {
  $text = $post->post_excerpt;
  $text = strip_shortcodes( $text );
  $text = apply_filters('the_content', $text);
  $text = str_replace(']]>', ']]&gt;', $text);
  $text = strip_tags($text);
  $excerpt_length = apply_filters('excerpt_length', 55);
  $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
  $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
  if ( count($words) > $excerpt_length ) {
    array_pop($words);
    $text = implode(' ', $words);
    $text = $text . $excerpt_more;
  } else {
    $text = implode(' ', $words);
  }
}
1
John P Bloch

Versuchen Sie Folgendes: Sie können die Anzahl der Wörter steuern, die der Ausdruck ausgibt. Mit dem Filter "excerpt_length" unten finden Sie einige Beispiele, wie Sie die Größe basierend auf verschiedenen Bedingungen steuern können

add_filter( 'excerpt_length', 'new_excerpt_length' );
function new_excerpt_length( $more ) {
    if(is_front_page()){
        if(has_post_thumbnail()){
            return 15;
        } else {
            return 45;
        }
    } else {
        return 100;
    }
}

EDIT: Mist, mir ist gerade aufgefallen, dass Sie sagten, der Filteransatz sei ein No-Go. na ja das ist für andere leute die hier über google kommen und das dann wollen.

0
Infinity Media

Einfach kann es wie folgt gemacht werden.

function custom_excerpt_length( $length ) {
    return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );

Referenz: Codex

0
Ibnul Hasan