HTML को अंश में अनुमति दें


56

यहाँ मेरा उद्धरण कोड है।

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

मैं html को कैसे अनुमति दूं <a> <b> <i> <br>

जवाबों:


124

उदाहरण के लिए पूरा गाइड

मैंने हाल ही में अंश के संबंध में कुछ सवालों के जवाब दिए हैं, इसलिए मैं जितना संभव हो उतना विस्तृत विवरण देने जा रहा हूं।

प्रस्तावना

ऐसा लगता है कि इस कोड से कई सवाल उठ रहे हैं, जहां कोड जाना चाहिए, और जवाब है, यह वास्तव में आप पर निर्भर है और आप कैसे फिट देखते हैं। ऐसे कुछ विकल्प हैं जहाँ आप कोड रख सकते हैं (यदि स्पष्ट रूप से नहीं कहा गया है):

  • अपने विषय के functions.php या किसी फ़ाइल में एक फ़ंक्शन फ़ाइल के रूप में उपयोग करें। बस यह याद रखें कि जब आप ऐसा करते हैं, यदि थीम आपकी खुद की नहीं है, तो अपने विषय को अपग्रेड करते समय सभी परिवर्तन खो जाएंगे

  • एक बेहतर तरीका यह होगा कि बच्चे थीम में कोड का उपयोग करें। ऊपर के रूप में, functions.php या फ़ंक्शन संबंधित फ़ाइल में

  • एक प्लगइन में कोड का उपयोग करें। यह पसंदीदा तरीका है क्योंकि यह सभी विषयों पर कोड उपलब्ध कराता है। यदि आप थीम स्विच करते हैं, तो आपको उसी कोड को फिर से लिखने के बारे में चिंता करने की ज़रूरत नहीं है।

मुझे उम्मीद है कि यह चीजें थोड़ा साफ करती हैं :-)

HTML टैग्स / प्रारूपण

the_excerpt()सबसे पहले किसी भी पैरामीटर को स्वीकार नहीं करता है, इसलिए इसे कुछ भी पारित नहीं किया जा सकता है। यह एक तथ्य है कि the_excerpt()सामग्री को 55 शब्दों में विभाजित किया जाता है, और पाठ को वापस करने से पहले सभी HTML टैग छीन लिए जाते हैं। the_excerpt()स्थित है wp में शामिल / पोस्ट- template.php । अंश में कुछ या सभी HTML टैग की अनुमति देने के लिए एक नया अंश बनाना होगा।

सबसे पहले, मूल फ़ंक्शन को पहले निकालने की आवश्यकता होती है, और फिर नए फ़ंक्शन को हुक करने की आवश्यकता होती है get_the_excerpt। कृपया ध्यान दें, यह नया अंश अभी भी the_excerpt()टेम्पलेट फ़ाइलों के रूप में कॉल करने योग्य होगा, इसे बदलने की कोई आवश्यकता नहीं है। get_the_excerpt()स्थित है wp में शामिल / पोस्ट- template.php

wp_trim_excerptछंटनी पाठ को वापस करने के लिए अंश का उपयोग करता है, इसलिए हमें wp_trim_excerptअंश फ़िल्टर से पहले निकालने की आवश्यकता है । wp- / / formatting.php , लाइन 2355 wp_trim_excerpt()में स्थित है । यह इस प्रकार है:

remove_filter('get_the_excerpt', 'wp_trim_excerpt');

अब आप अपना नया अंश जोड़ सकते हैं get_the_excerpt

add_filter('get_the_excerpt', 'wpse_custom_wp_trim_excerpt');

HTML टैग / फ़ॉर्मेटिंग की अनुमति देने के लिए, हमें यह निर्दिष्ट करना होगा कि आपको कौन से टैग की अनुमति देने की आवश्यकता होगी। strip_tagsइसे प्राप्त करने के लिए आप निम्नलिखित कथन का उपयोग कर सकते हैं

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

दूसरा तर्क wpse_allowedtags()एक छोटा फ़ंक्शन है जो टैग जोड़ने के लिए उपयोग किया जाता है the_excerpt()। मान्य एचटीएमएल 5 टैग की एक पूरी सूची के लिए जाना है और इसे बाहर की जाँच यहाँ । यहां फ़ंक्शन है, इसमें कोई भी html टैग जोड़ें जो आपको अनुमति / रखने की आवश्यकता है

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

यदि आपको सभी HTML टैगों को अनुमति देने की आवश्यकता है, अर्थात किसी भी टैग को अलग करना नहीं है, तो strips_tags()फ़ंक्शन को पूरी तरह से छोड़ा / हटाया जा सकता है।

ध्यान देने वाली बात यह है कि जब html टैग्स की अनुमति दी जाती है, तो इन टैग्स को शब्दों के रूप में गिना जाता है, इसलिए टैग्स और बिना टैग्स के अंशों के लिए आपकी शब्द गणना समान नहीं होगी। इसे ठीक करने के लिए, आपको पहले वास्तविक शब्द गणना से इन टैग को हटाने की आवश्यकता होगी ताकि केवल शब्द गिने जाएं।

मैंने एक अंश लिखा है जो सभी टैगों की अनुमति देगा, केवल शब्दों को शब्दों के रूप में गिनें, और शब्दों की निर्धारित मात्रा के बाद एक वाक्य पूरा करें (इसलिए पाठ को मध्य-वाक्य में छंटनी नहीं होगी) और अंतिम शब्द के बाद एक और पाठ जोड़ें ।

यहाँ पूरा कोड है

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

आप केवल उन कार्यों से '//' को हटा सकते हैं जिन्हें आपको अतिरिक्त आवश्यकता है।

कस्टम एक्स्ट्राटेरिप लैंथ्स

कभी-कभी आपको अलग-अलग लंबाई के सरल अंश प्रदर्शित करने की आवश्यकता होती है और प्रत्येक पोस्ट / फ़ंक्शन / पृष्ठ के लिए एक अंश लिखना व्यवहार्य नहीं होता है। यहाँ एक छोटा सा छोटा सा फंक्शन प्रयोग किया जा रहा है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>');
}

यह छोटा सा कार्य क्या कर रहा है get_the_excerpt, यह $limitउपयोगकर्ता द्वारा निर्धारित करने के लिए ट्रिमिंग कर रहा है , और अंत में एक और अधिक लिंक के साथ पाठ को वापस कर रहा है।

आप इस अंश को अपने टेम्पलेट में अनुसरण के रूप में कह सकते हैं

echo wpse_custom_excerpts($limit);

$limitआपका शब्द कहां होगा, इसलिए 30 शब्दों का एक अंश होगा

echo wpse_custom_excerpts(30);

यहां एक बात याद रखें, यदि आप अपनी सीमा को 55 से अधिक शब्दों पर सेट करते हैं, तो केवल 55 शब्द वापस आ जाएंगे क्योंकि अंश केवल 55 शब्द है। यदि लंबे समय तक अंश की आवश्यकता होती है, तो get_the_contentइसके बजाय उपयोग करें ।

कस्टम एक्स्टेंप्ट लेंग्थ

यदि आपको केवल लंबाई बदलने की आवश्यकता है the_excerpt(), तो आप निम्न फ़ंक्शन का उपयोग कर सकते हैं

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

याद रखें, आपको 10 से अधिक प्राथमिकता तय करनी होगी ताकि आपका कस्टम फ़ंक्शन डिफ़ॉल्ट के बाद निष्पादित हो।

अधिक लिंक लिंक पढ़ें

अंश द्वारा लौटाए गए सभी पाठ [...]में अंत में नफरत है जो क्लिक करने योग्य नहीं है। नरक के स्थान पर एक और अधिक पाठ जोड़ने के लिए, इस फ़ंक्शन का उपयोग करें

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

संपादित करें

पहले पैराग्राफ का अंश

मैं इसे पूरा रखना चाहता हूं, इसलिए यहां वह अंश है जो पहले पैराग्राफ के बाद शुरू होता है।

यहां एक फ़ंक्शन है जो HTML टैग्स को चातुर्य में रखता है, अंश के अंत में एक "और पढ़ें" लिंक जोड़ता है और पहले पैराग्राफ के बाद अंश को ट्रिम करता है।

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

किसी के लिए जिसे वर्कअराउंड की आवश्यकता होती है, अंश को पढ़ने के बाद लिंक को प्रदर्शित नहीं करने के लिए जब अंश छोटा होता है कि शब्दों की मात्रा सेट हो, तो कृपया निम्नलिखित प्रश्न और उत्तर देखें


जहां मैं वास्तव में इस हिस्से को function wpse_allowedtags() { // Add custom tags to this string return '<script>,<style>,<br>,<em>,<i>,<ul>,<ol>,<li>,<a>,<p>,<img>,<video>,<audio>'; }भ्रमित करता
हूं

1
यह सब कोड अंदर जाता है functions.php। आप इसे ऊपर if ( ! function_exists( 'wpse_custom_wp_trim_excerpt' ) ) :अपने बस में जोड़ सकते हैंfunctions.php
पीटर गोएंस

1
nvm i कोड में सबसे ऊपर से चूक गया
user32447

1
अगर यह फ़ंक्शन में चला जाता है। एक अद्यतन के साथ आने पर फ़ाइल अधिलेखित नहीं होगी?
मार्च को mcgrailm

3
@mcgrailm हाँ यह होगा। यही कारण है कि अपने बच्चे के विषयों के कार्यों में इसे जोड़ना महत्वपूर्ण है । तुम भी एक प्लगइन का उपयोग करने के लिए इसे जोड़ सकते हैं
Pieter Goosen

1

यदि आपको आवश्यकता हो तो और टैग जोड़ें $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);
}

प्रेषक: http://bacsoftwareconsulting.com/blog/index.php/wordpress-cat/how-to-preserve-html-tags-in-wordpress-excerpt-without-a-plugin


0

आप अंश के रूप में अच्छी तरह से समृद्ध पाठ संपादक जोड़ सकते हैं, प्लगइन फ़ाइल या थीम के फ़ंक्शन में नीचे दिए गए कोड को जोड़ सकते हैं। पीडीएफ फाइल और आप अंश के लिए HTML संपादक देख सकते हैं। इसके अलावा, यह HTML प्रारूप में भी अंश प्रस्तुत करेगा। #cheers

मैंने इसे कहीं से कॉपी किया है, लेकिन स्रोत याद नहीं है। मैं अपने सभी प्रोजेक्ट्स में इसका इस्तेमाल कर रहा हूं और यह काम कर रहा है।

यहाँ छवि विवरण दर्ज करें

/**
  * 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
        );
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.