wake-up-neo.net

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