it-swarm.com.de

Erlaube HTML im Auszug

Hier ist mein Auszugscode.

// Generate custom excerpt length
function wpbx_excerpt_length($length) {
    return 300;
}
add_filter('excerpt_length', 'wpbx_excerpt_length');

Wie erlaube ich HTML wie <a> <b> <i> <br>

53
user32447

KOMPLETTE ANLEITUNG ZU AUSZÜGEN

Ich habe vor kurzem einige Fragen zu Auszügen beantwortet, daher werde ich eine detaillierte Erläuterung geben, soweit ich kann.

VORWORT

Aus dieser Antwort scheinen sich einige Fragen zu ergeben, wo der Code hingehen soll, und die Antwort lautet: Es liegt wirklich an Ihnen und wie Sie es für richtig halten. Es gibt eine Reihe von Optionen, mit denen Sie den Code platzieren können (falls nicht ausdrücklich angegeben):

  • Verwenden Sie in der Datei functions.php Ihres Themas oder in einer beliebigen Datei als Funktionsdatei. Denken Sie daran, wenn Sie dies tun, und wenn das Thema nicht Ihr eigenes ist, gehen alle Änderungen verloren, wenn Sie Ihr Thema aktualisieren

  • Eine bessere Möglichkeit wäre, den Code in einem untergeordneten Thema zu verwenden. Wie oben in der Datei functions.php oder functions related

  • Verwenden Sie den Code in einem Plugin. Dies ist die bevorzugte Methode, da der Code auf diese Weise für alle Themen verfügbar ist. Wenn Sie das Thema wechseln, müssen Sie sich nicht darum kümmern, den gleichen Code neu zu schreiben.

Ich hoffe das klärt ein bisschen auf :-)

HTML TAGS/FORMATTING

the_excerpt() akzeptiert zunächst keine Parameter, daher kann nichts an sie übergeben werden. Es ist eine Tatsache, dass the_excerpt() den Inhalt auf 55 Wörter reduziert und alle HTML-Tags entfernt werden, bevor der Text zurückgegeben wird. the_excerpt() befindet sich in wp-includes/post-template.php . Um bestimmte oder alle HTML-Tags im Auszug zuzulassen, muss ein neuer Auszug erstellt werden.

Zuerst muss die ursprüngliche Funktion entfernt werden und dann muss die neue Funktion mit get_the_excerpt verknüpft werden. Bitte beachten Sie, dass dieser neue Auszug weiterhin als the_excerpt() in Vorlagendateien aufgerufen werden kann, ohne dass dies geändert werden muss. get_the_excerpt() befindet sich in wp-includes/post-template.php .

Der Auszug verwendet wp_trim_excerpt , um den zugeschnittenen Text zurückzugeben, daher müssen wir zuerst wp_trim_excerpt aus dem Auszugfilter entfernen. wp_trim_excerpt() befindet sich in wp-includes/formatting.php , Zeile 2355. So geht's:

remove_filter('get_the_excerpt', 'wp_trim_excerpt');

Sie können jetzt Ihren neuen Auszug zu get_the_excerpt hinzufügen.

add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');

Um HTML-Tags/Formatierungen zuzulassen, müssen wir angeben, welche Tags Sie zulassen müssen. Sie können die folgende strip_tags-Anweisung verwenden, um dies zu erreichen

$wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags());

Das zweite Argument wpse_allowedtags() ist eine kleine Funktion, die zum Hinzufügen der Tags verwendet wird, die the_excerpt() zulässt. Eine vollständige Liste der gültigen HTML 5-Tags finden Sie unter hier . Hier ist die Funktion, fügen Sie alle HTML-Tags hinzu, die Sie zulassen/behalten müssen

function wpse_allowedtags() {
// Add custom tags to this string
    return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; 
}

Wenn Sie alle HTML-Tags zulassen müssen, dh keine Tags entfernen möchten, kann die Funktion strips_tags() vollständig weggelassen/entfernt werden.

Wenn HTML-Tags zulässig sind, werden diese Tags jedoch als Wörter gezählt, sodass Ihre Wortanzahl für Auszüge mit Tags und ohne Tags nicht identisch ist. Um dies zu korrigieren, müssen Sie diese Tags zuerst aus der tatsächlichen Wortanzahl entfernen, damit nur Wörter gezählt werden.

Ich habe einen Auszug geschrieben, der alle Tags zulässt, nur Wörter als Wörter zählt und einen Satz nach der festgelegten Anzahl von Wörtern vervollständigt (sodass der Text nicht in der Mitte des Satzes abgeschnitten wird) und nach dem letzten Wort einen weiteren Text hinzufügt .

Hier ist der vollständige Code

function wpse_allowedtags() {
    // Add custom tags to this string
        return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; 
    }

if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) : 

    function wpse_custom_wp_trim_excerpt($wpse_excerpt) {
    $raw_excerpt = $wpse_excerpt;
        if ( '' == $wpse_excerpt ) {

            $wpse_excerpt = get_the_content('');
            $wpse_excerpt = strip_shortcodes( $wpse_excerpt );
            $wpse_excerpt = apply_filters('the_content', $wpse_excerpt);
            $wpse_excerpt = str_replace(']]>', ']]&gt;', $wpse_excerpt);
            $wpse_excerpt = strip_tags($wpse_excerpt, wpse_allowedtags()); /*IF you need to allow just certain tags. Delete if all tags are allowed */

            //Set the excerpt Word count and only break after sentence is complete.
                $excerpt_Word_count = 75;
                $excerpt_length = apply_filters('excerpt_length', $excerpt_Word_count); 
                $tokens = array();
                $excerptOutput = '';
                $count = 0;

                // Divide the string into tokens; HTML tags, or words, followed by any whitespace
                preg_match_all('/(<[^>]+>|[^<>\s]+)\s*/u', $wpse_excerpt, $tokens);

                foreach ($tokens[0] as $token) { 

                    if ($count >= $excerpt_length && preg_match('/[\,\;\?\.\!]\s*$/uS', $token)) { 
                    // Limit reached, continue until , ; ? . or ! occur at the end
                        $excerptOutput .= trim($token);
                        break;
                    }

                    // Add words to complete sentence
                    $count++;

                    // Append what's left of the token
                    $excerptOutput .= $token;
                }

            $wpse_excerpt = trim(force_balance_tags($excerptOutput));

                $excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . '&nbsp;&raquo;&nbsp;' . sprintf(__( 'Read more about: %s &nbsp;&raquo;', 'wpse' ), get_the_title()) . '</a>'; 
                $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); 

                //$pos = strrpos($wpse_excerpt, '</');
                //if ($pos !== false)
                // Inside last HTML tag
                //$wpse_excerpt = substr_replace($wpse_excerpt, $excerpt_end, $pos, 0); /* Add read more next to last Word */
                //else
                // After the content
                $wpse_excerpt .= $excerpt_more; /*Add read more in new paragraph */

            return $wpse_excerpt;   

        }
        return apply_filters('wpse_custom_wp_trim_excerpt', $wpse_excerpt, $raw_excerpt);
    }

endif; 

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt'); 

Sie können einfach das '//' von Funktionen entfernen, die Sie zusätzlich benötigen.

BENUTZERDEFINIERTE AUSZUGSLÄNGEN

Manchmal müssen Sie einfache Auszüge unterschiedlicher Länge anzeigen, und es ist nicht sinnvoll, für jeden Beitrag/jede Funktion/Seite einen Auszug zu schreiben. Hier ist eine nette kleine Funktion mit wp_trim_words

function wpse_custom_excerpts($limit) {
    return wp_trim_words(get_the_excerpt(), $limit, '<a href="'. esc_url( get_permalink() ) . '">' . '&nbsp;&hellip;' . __( 'Read more &nbsp;&raquo;', 'wpse' ) . '</a>');
}

Diese kleine Funktion übernimmt get_the_excerpt, schneidet ihn auf den vom Benutzer festgelegten $limit und gibt den Text mit einem weiterführenden Link am Ende zurück.

Sie können diesen Auszug wie folgt in Ihrer Vorlage aufrufen

echo wpse_custom_excerpts($limit);

wobei $limit Ihre Wortzahl ist, also ein Auszug von 30 Wörtern

echo wpse_custom_excerpts(30);

Nur eine Sache zu beachten, wenn Sie Ihr Limit auf mehr als 55 Wörter setzen, werden nur 55 Wörter zurückgegeben, da der Auszug nur 55 Wörter lang ist. Wenn längere Auszüge benötigt werden, verwenden Sie stattdessen get_the_content.

BENUTZERDEFINIERTE AUSZUGSLÄNGE

Wenn Sie nur die Länge von the_excerpt() ändern müssen, können Sie die folgende Funktion verwenden

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

Denken Sie daran, dass Sie eine höhere Priorität als 10 festlegen müssen, damit Ihre benutzerdefinierte Funktion nach der Standardeinstellung ausgeführt wird.

ADD READ MORE LINK

Alle vom Auszug zurückgegebenen Texte haben den verhassten [...] am Ende, auf den nicht geklickt werden kann. Verwenden Sie diese Funktion, um anstelle der hellips einen weiteren Text hinzuzufügen

 function wpse_excerpt_more( $more ) {
    return ' <a class="read-more" href="'. get_permalink( get_the_ID() ) . '">' . __('Read More', 'your-text-domain') . '</a>';
}
add_filter( 'excerpt_more', 'wpse_excerpt_more' );

EDIT

Auszug erster Absatz

Ich möchte dies vollständig halten, daher hier der Auszug, der nach dem ersten Absatz abgeschnitten wird.

Hier ist eine Funktion, die HTML-Tags auf dem neuesten Stand hält, einen "Read More" -Link am Ende des Ausschnitts hinzufügt und den Auszug nach dem ersten Absatz schneidet.

if ( ! function_exists( 'wpse0001_custom_wp_trim_excerpt' ) ) : 

    function wpse0001_custom_wp_trim_excerpt($wpse0001_excerpt) {
        global $post;
        $raw_excerpt = $wpse0001_excerpt;
        if ( '' == $wpse0001_excerpt ) {

            $wpse0001_excerpt = get_the_content('');
            $wpse0001_excerpt = strip_shortcodes( $wpse0001_excerpt );
            $wpse0001_excerpt = apply_filters('the_content', $wpse0001_excerpt);
            $wpse0001_excerpt = substr( $wpse0001_excerpt, 0, strpos( $wpse0001_excerpt, '</p>' ) + 4 );
            $wpse0001_excerpt = str_replace(']]>', ']]&gt;', $wpse0001_excerpt);

            $excerpt_end = ' <a href="'. esc_url( get_permalink() ) . '">' . '&nbsp;&raquo;&nbsp;' . sprintf(__( 'Read more about: %s &nbsp;&raquo;', 'pietergoosen' ), get_the_title()) . '</a>'; 
            $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end); 

            //$pos = strrpos($wpse0001_excerpt, '</');
            //if ($pos !== false)
            // Inside last HTML tag
            //$wpse0001_excerpt = substr_replace($wpse0001_excerpt, $excerpt_end, $pos, 0);
            //else
            // After the content
            $wpse0001_excerpt .= $excerpt_more;

            return $wpse0001_excerpt;

        }
        return apply_filters('wpse0001_custom_wp_trim_excerpt', $wpse0001_excerpt, $raw_excerpt);
    }

endif; 

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'wpse0001_custom_wp_trim_excerpt');

EDIT 29-10-2015

Wenn Sie eine Problemumgehung benötigen, um den Link "Mehr lesen" nach dem Auszug nicht anzuzeigen, wenn der Auszug kürzer als die festgelegte Wortanzahl ist, lesen Sie bitte die folgende Frage und Antwort

117
Pieter Goosen

Fügen Sie weitere Tags hinzu, wenn Sie $allowed_tags = ... benötigen.

function _20170529_excerpt($text) {
$raw_excerpt = $text;
if ( '' == $text ) {
    //Retrieve the post content. 
    $text = get_the_content('');

    //Delete all shortcode tags from the content. 
    $text = strip_shortcodes( $text );

    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]&gt;', $text);

    $allowed_tags = '<a>,<b>,<br><i>'; 
    $text = strip_tags($text, $allowed_tags);

    $excerpt_Word_count = 55; /*** MODIFY THIS. change the excerpt Word count to any integer you like.***/
    $excerpt_length = apply_filters('excerpt_length', $excerpt_Word_count); 

    $excerpt_end = '[...]'; /*** MODIFY THIS. change the excerpt endind to something else.***/
    $excerpt_more = apply_filters('excerpt_more', ' ' . $excerpt_end);

    $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);
    }
}
return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

Von: http://bacsoftwareconsulting.com/blog/index.php/wordpress-cat/how-to-preserve-html-tags-in-wordpress-excerpt-without-a-plugin/

1
prosti

Sie können auch einen Rich-Text-Editor für Auszüge hinzufügen. Fügen Sie den folgenden Code in die Plugin-Datei oder die function.php-Datei des Themas ein, und Sie können den HTML-Editor für Auszüge anzeigen. Darüber hinaus werden auch Auszüge im HTML-Format gerendert. #Prost

Ich habe das von irgendwoher kopiert, erinnere mich aber nicht an die Quelle. Ich benutze dies in allen Projekten und es funktioniert.

 enter image description here 

/**
  * Replaces the default excerpt editor with TinyMCE.
*/
add_action( 'add_meta_boxes', array ( 'T5_Richtext_Excerpt', 'switch_boxes' ) );
class T5_Richtext_Excerpt
{
    /**
     * Replaces the meta boxes.
     *
     * @return void
     */
    public static function switch_boxes()
    {
        if ( ! post_type_supports( $GLOBALS['post']->post_type, 'excerpt' ) )
        {
            return;
        }

        remove_meta_box(
            'postexcerpt', // ID
            '',            // Screen, empty to support all post types
            'normal'      // Context
        );

        add_meta_box(
            'postexcerpt2',     // Reusing just 'postexcerpt' doesn't work.
            __( 'Excerpt' ),    // Title
            array ( __CLASS__, 'show' ), // Display function
            null,              // Screen, we use all screens with meta boxes.
            'normal',          // Context
            'core',            // Priority
        );
    }

    /**
     * Output for the meta box.
     *
     * @param  object $post
     * @return void
     */
    public static function show( $post )
    {
        ?>
        <label class="screen-reader-text" for="excerpt"><?php
        _e( 'Excerpt' )
        ?></label>
        <?php
            // We use the default name, 'excerpt', so we don’t have to care about
            // saving, other filters etc.
            wp_editor(
                self::unescape( $post->post_excerpt ),
                'excerpt',
                array (
                    'textarea_rows' => 15,
                    'media_buttons' => FALSE,
                    'teeny'         => TRUE,
                    'tinymce'       => TRUE
                )
            );
    }

    /**
     * The excerpt is escaped usually. This breaks the HTML editor.
     *
     * @param  string $str
     * @return string
     */
    public static function unescape( $str )
    {
        return str_replace(
            array ( '&lt;', '&gt;', '&quot;', '&amp;', '&nbsp;', '&amp;nbsp;' ),
                array ( '<',    '>',    '"',      '&',     ' ', ' ' ),
                $str
        );
    }
}
0
Mayur Chauhan