HTML'yi alıntılara izin ver


56

İşte benim alıntı kodum.

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

Html gibi nasıl izin veririm <a> <b> <i> <br>

Yanıtlar:


124

UZMANLAR İÇİN TAM KILAVUZ

Kısa süre önce alıntılarla ilgili birkaç soruyu cevapladım, bu yüzden elimden geldiğince detaylı bir açıklama yapacağım.

ÖNSÖZ

Kodun nereye gitmesi gerektiğine dair bu cevaptan kaynaklanan birkaç soru var gibi görünüyor ve cevap, gerçekten size ve nasıl uygun gördüğünüze bağlı. Kodu yerleştirebileceğiniz birkaç seçenek vardır (açıkça belirtilmemişse):

  • Temanızın functions.php veya herhangi bir dosyada bir işlev dosyası olarak kullanın. Sadece bunu yaptığınızda hatırlayın, tema sizin değilse, temanızı yükseltirken tüm değişiklikler kaybolacak

  • Kodu bir çocuk temasında kullanmak daha iyi bir yol olacaktır. Yukarıdaki gibi, Fonksiyonlarda.

  • Bir eklenti kodu kullanın. Bu, kodu tüm temalar için kullanılabilir kıldığından tercih edilen yoldur. Tema değiştirirseniz, aynı kodu yeniden yazmak için endişelenmenize gerek yoktur.

Umarım bu işleri biraz temizler :-)

HTML ETİKETLERİ / FORMATLAMA

the_excerpt()her şeyden önce herhangi bir parametre kabul etmiyor, bu yüzden hiçbir şey kendisine iletilemiyor. the_excerpt()İçeriği 55 kelimeye kesen bir gerçektir ve metni döndürmeden önce tüm HTML etiketleri çıkarılır. the_excerpt()bulunur / sonrası template.php wp-kapsamaktadır . Alıntıdaki bazı HTML etiketlerine izin vermek için, yeni bir alıntı oluşturulmalıdır.

Her şeyden önce, orijinal işlev ilk önce kaldırılmalı ve ardından yeni işlevin bağlanması gerekir get_the_excerpt. Lütfen dikkat, bu yeni alıntı hala the_excerpt()şablon dosyalarında olduğu gibi çağrılabilir olacak , değiştirmenize gerek kalmayacak. get_the_excerpt()bulunur / sonrası template.php wp-kapsamaktadır .

Yazıyı wp_trim_excerptkesilmiş metni döndürmek için kullanır , bu nedenle önce yazıyı wp_trim_excerptfiltreden kaldırmamız gerekir . wp_trim_excerpt()bulunan wp-includes / formatting.php , çizgi 2355. Bu nasıl:

remove_filter('get_the_excerpt', 'wp_trim_excerpt');

Artık yeni alıntılarınızı şuraya ekleyebilirsiniz. get_the_excerpt

add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');

Html etiketlerine / biçimlendirmelerine izin vermek için hangi etiketlere izin vermeniz gerektiğini belirtmemiz gerekir. Bunu strip_tagselde etmek için aşağıdaki ifadeyi kullanabilirsiniz.

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

İkinci argüman wpse_allowedtags()etiketleri the_excerpt()izin verecek şekilde eklemek için kullanılan küçük bir fonksiyondur . Geçerli bir HTML 5 etiketinin tam listesi için, buraya gidin ve buradan kontrol edin . İşte fonksiyon, izin vermeniz / saklamanız gereken herhangi bir html etiketi ekleyin.

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

Tüm HTML etiketlerine izin vermeniz gerekiyorsa, yani, herhangi bir etiketin sıyrılmaması durumunda, strips_tags()işlev tamamen atlanabilir / kaldırılabilir.

Bununla birlikte, dikkat edilmesi gereken nokta, html etiketlerine izin verildiğinde, bu etiketler sözcükler olarak sayılır, böylece etiketli ve etiketsiz alıntılar için kullanılan kelime sayınız aynı olmaz. Bunu düzeltmek için, bu etiketleri ilk önce gerçek kelime sayımından kaldırmanız gerekecek, böylece yalnızca kelimeler sayılacak.

Tüm etiketlere izin verecek, sadece kelimeleri kelime olarak sayacak ve belirli bir miktardaki sözcüklerden sonra bir cümleyi tamamlayacak bir cümle yazdım (böylece metin cümlenin ortasında kesilmez) ve son kelimeden sonra daha fazla metin ekleyin .

İşte kodun tamamı

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'); 

'//' fonksiyonunu sadece ekstra ihtiyacınız olan fonksiyonlardan kaldırabilirsiniz.

ÖZEL UZMANLIK UZUNLUKLARI

Bazen farklı uzunluklarda basit alıntılar göstermeniz gerekir ve her yazı / işlev / sayfa için bir alıntı yazmak uygun değildir. İşte kullanarak güzel bir küçük küçük fonksiyonwp_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>');
}

Bu küçük işlevin alıyor mu get_the_excerptbunu kırparak, $limitkullanıcı tarafından ayarlanan ve sonunda bir okuma daha bağlantıyı içeren metni dönüyor.

Bu alıntıyı şablonunuzdaki gibi arayabilirsiniz.

echo wpse_custom_excerpts($limit);

$limitkelime sayınız nerede olacak, bu yüzden 30 kelimelik bir alıntı

echo wpse_custom_excerpts(30);

Burada hatırlanması gereken tek bir şey var; sınırınızı 55 kelimeden daha fazlaya ayarlarsanız, alıntı sadece 55 kelimelik uzunluğa sahip olduğundan yalnızca 55 kelime döndürülecek. Daha uzun bölümlere ihtiyaç duyulursa, get_the_contentbunun yerine kullanın.

ÖZEL AŞIRI UZUNLUK

Uzunluğunu değiştirmeniz gerekirse the_excerpt(), aşağıdaki işlevi kullanabilirsiniz.

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

Unutmayın, özel işleviniz varsayılandan sonra çalışacak şekilde 10'dan daha büyük bir öncelik belirlemeniz gerekir.

EKLE DEVAMINI OKU

Alıntıyla döndürülen tüm metinlerin [...]sonunda tıklanamayan nefret vardır . Hellips yerine daha fazla metin okumak için bu işlevi kullanın.

 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' );

DÜZENLE

Alıntı birinci paragraf

Bunu tam tutmak istiyorum, işte ilk paragraftan sonra kırpılan alıntı.

İşte HTML etiketlerini dokunuşta tutan, pasajın sonuna "Daha Fazla Oku" bağlantısı ekleyen ve pasajı ilk paragraftan sonra kesen bir fonksiyon.

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

Alıntıdan sonraki alıntıyı daha fazla göstermemesi için geçici bir süreye ihtiyaç duyan herhangi biri için, alıntı yapılan kelime miktarından daha kısa olduğunda, lütfen aşağıdaki soruya ve cevaba bakınız.


tam olarak bu bölümü function wpse_allowedtags() { // Add custom tags to this string return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; }kafam karıştırabilirim nerede
user32447

1
Bütün bu kod giriyor functions.php. Sadece yukarıda o ekleyebilir if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) :senin içindefunctions.php
Pieter Goosen

1
nvm kodun tepesini kaçırdım
user32447,

1
Bu bir fonksiyona girerse, bir güncelleme geldiğinde bunun üzerine yazılmayacak mı?
mcgrailm

3
@mcgrailm evet olur. Bu yüzden bunu çocuğunuzun temalarının işlevlerine eklemeniz önemlidir . Hatta mutlaka kullanmanız gereken bir eklentiye ekleyebilirsiniz
Pieter Goosen

1

Eğer ihtiyacınız varsa daha fazla etiket ekleyin $allowed_tags = ...

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

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


0

Ayrıca alıntılar için zengin metin düzenleyicisi ekleyebilir, eklenti dosyasına ya da theme function.php dosyasına aşağıdaki kodu ekleyebilir ve alıntılar için HTML düzenleyicisini görebilirsiniz. Dahası, HTML formatında da alıntılar yapacaktır. #cheers

Bunu bir yerden kopyaladım ama kaynağı hatırlamıyorum. Bunu tüm projelerimde kullanıyorum ve çalışıyor.

görüntü tanımını buraya girin

/**
  * 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
        );
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.