लूप के बाहर the_excerpt () पाने के लिए wp_trim_excerpt का उपयोग करना


20

मैं एक विषय का निर्माण कर रहा हूं, जो संभावित रूप से दर्जनों पदों के लिए मुखपृष्ठ पर अंश दिखाने जा रहा है। मेरे सभी पदों पर मेरे पास मैन्युअल अंश नहीं हैं, इसलिए $post->post_excerptकई पदों के लिए खाली है। इस घटना में कि कोई मैनुअल अंश नहीं है, मैं अंतर्निहित get_the_excerpt () फ़ंक्शन का उपयोग करना चाहूंगा, लेकिन यह लूप के बाहर उपलब्ध नहीं है।

फ़ंक्शन को ट्रैक करना, ऐसा लगता है कि यह wp_trim_excerpt का उपयोग करता है wp- शामिल / formatting.php से मक्खी पर अंश बनाने के लिए। मैं इसे अपने कोड में पसंद कर रहा हूं wp_trim_excerpt( $item->post_content ), लेकिन यह केवल पूर्ण सामग्री वापस कर रहा है। क्या मुझसे कुछ ग़लत हो रहा है?

मुझे पता है कि मैं एक अंश बनाने के लिए अपना स्वयं का फ़ंक्शन बना सकता हूं, लेकिन मुझे अपने संभावित कोड / फ़िल्टर के साथ अपने कोड को संगत रखते हुए अंतर्निहित कार्यों का उपयोग करना पसंद है।

http://adambrown.info/p/wp_hooks/hook/wp_trim_excerpt?version=3.0&file=wp-includes/formatting.php


आप अंश फ़िल्टर को कॉल करने का प्रयास कर सकते हैं ...$myvar = apply_filters( 'the_excerpt', $myvar );
t31os

जवाबों:


22

WP 3.3.0 के बाद से, wp_trim_words() यदि आप उस सामग्री को प्राप्त करने में सक्षम हैं जो आप के लिए एक अंश उत्पन्न करना चाहते हैं। आशा है कि किसी के लिए उपयोगी है और यह अपने शब्द गिनती समारोह बनाने से बचाता है।

http://codex.wordpress.org/Function_Reference/wp_trim_words


8

wp_trim_excerpt() थोड़ा जिज्ञासु यांत्रिकी है - अगर कुछ भी इसे पारित किया जाता है तो यह कुछ भी नहीं करता है।

इसके पीछे बुनियादी तर्क है:

  • get_the_excerpt() मैनुअल अंश के लिए जाँच;
  • wp_trim_excerpt() अगर कोई मैन्युअल अंश नहीं है तो झंकार और सामग्री या टीज़र से एक बनाता है।

दोनों कसकर वैश्विक चर और इसलिए लूप से बंधे हैं।

लूप के बाहर आप कोड से बाहर निकालने wp_trim_excerpt()और अपने ट्रिम फ़ंक्शन को लिखने के लिए बेहतर हैं ।


6

अपडेट करें:

यहाँ wp_trim_excerpt () का व्युत्पन्न है, जिसका मैंने उपयोग किया। अच्छी तरह से काम। वर्डप्रेस संस्करण 3.0.4 से व्युत्पन्न

function my_excerpt($text, $excerpt)
{
    if ($excerpt) return $excerpt;

    $text = strip_shortcodes( $text );

    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]>', $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);
    }

    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

आपको एक नया उत्तर पोस्ट करने की आवश्यकता नहीं है, आप हमेशा नई जानकारी शामिल करने के लिए अपने पुराने को संपादित कर सकते हैं। उदाहरण के लिए, आप अपने पहले उत्तर से WP कोड के लिंक को इस एक में कॉपी कर सकते हैं और फिर अपना पहला उत्तर हटा सकते हैं।
जान फ्राई

वहां से कॉपी / पेस्ट करने वालों के लिए: $ raw_excerpt = $ text जोड़ें;
स्वेतोस्लाव मारिनोव

1

यहाँ मेरा एक "trim_excerpt" है जो पोस्ट ऑब्जेक्ट या पोस्ट आईडी को एक पैरामीटर के रूप में लेता है।

जाहिर है कि कोर में क्या है पर आधारित है। पता नहीं क्यों यह (और get_the_author ()) गैर लूप समकक्ष नहीं है।

/**
     * Generates an excerpt from the content, if needed.
     *
     * @param int|object $post_or_id can be the post ID, or the actual $post object itself
     * @param string $excerpt_more the text that is applied to the end of the excerpt if we algorithically snip it
     * @return string the snipped excerpt or the manual excerpt if it exists         
     */
    function zg_trim_excerpt($post_or_id, $excerpt_more = ' [...]') {
        if ( is_object( $post_or_id ) ) $postObj = $post_or_id;
        else $postObj = get_post($post_or_id);

        $raw_excerpt = $text = $postObj->post_excerpt;
        if ( '' == $text ) {
            $text = $postObj->post_content;

            $text = strip_shortcodes( $text );

            $text = apply_filters('the_content', $text);
            $text = str_replace(']]>', ']]>', $text);
            $text = strip_tags($text);
            $excerpt_length = apply_filters('excerpt_length', 55);

            // don't automatically assume we will be using the global "read more" link provided by the theme
            // $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);
            }
        }
        return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
    }

0

+1 से रास्ट। यह बहुत अजीब है कि get_the_excerpt ($ post-> ID) जैसी कोई चीज नहीं है, जब यह काफी स्पष्ट होना चाहिए कि यह होना चाहिए। वैसे भी, यहाँ वर्डप्रेस संस्करण 3.0.4 में wp_trim_excerpt () है:

http://core.trac.wordpress.org/browser/tags/3.0.4/wp-includes/formatting.php

function wp_trim_excerpt($text) {
1824            $raw_excerpt = $text;
1825            if ( '' == $text ) {
1826                    $text = get_the_content('');
1827    
1828                    $text = strip_shortcodes( $text );
1829    
1830                    $text = apply_filters('the_content', $text);
1831                    $text = str_replace(']]>', ']]>', $text);
1832                    $text = strip_tags($text);
1833                    $excerpt_length = apply_filters('excerpt_length', 55);
1834                    $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
1835                    $words = preg_split("/[\n\r\t ]+/", $text, $excerpt_length + 1, PREG_SPLIT_NO_EMPTY);
1836                    if ( count($words) > $excerpt_length ) {
1837                            array_pop($words);
1838                            $text = implode(' ', $words);
1839                            $text = $text . $excerpt_more;
1840                    } else {
1841                            $text = implode(' ', $words);
1842                    }
1843            }
1844            return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
1845    }

आप लाइन 1826 पर देख सकते हैं कि यह get_the_contents के माध्यम से $ पोस्ट वैश्विक चर से जुड़ा हुआ है। और हां, मुझे नहीं पता कि वे क्या सोच रहे थे। लेकिन यहाँ से, अपने स्वयं के my_excerpt में $ टेक्स्ट के साथ get_the_content को बदलें, और इसे एक समान तरीके से व्यवहार करना चाहिए।


azure_ardee : wp_trim_words ()

0

Get_the_content () फ़ंक्शन पूरी सामग्री लौटाएगा यदि $ अधिक! = 0. आपको वैश्विक वेरिएंट $ 0 से अधिक सेट करना है, तो सुनिश्चित करें कि get_the_content () फ़ंक्शन वापसी अंश।

संशोधित wp_trim_excerpt () फ़ंक्शन:

function wp_trim_excerpt($text) {
    $raw_excerpt = $text;
    if ( '' == $text ) {
        global $more;
        $tmp = $more;
        $more = 0;
        $text = get_the_content('');
        $more = $tmp;

        $text = strip_shortcodes( $text );

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

0

ऊपर दूसरों के उत्तरों का उपयोग करते हुए, यहां एक सरल उत्तर दिया गया है जो अच्छी तरह से काम करता है:

global $post;

$excerpt = apply_filters('get_the_excerpt', get_post_field('post_excerpt', $post->ID));

if ( $excerpt == '' ) {
    $excerpt = wp_trim_words( $post->post_content, 55 );
}

मैं <meta>OpenGraph विवरण को परिभाषित करने के लिए एक फ़ंक्शन में टैग में इसका उपयोग कर रहा हूं । तो मैं अभी जोड़:

<meta property="og:description" content="<?php echo esc_html( $excerpt ); ?>" />

HTML सामग्री के बारे में क्या? टैग के साथ यह कैसे होगा? अंश HTML टैग्स और शॉर्टकोड को भी स्ट्रिप्स करता है। क्या होगा अगर अंश के पहले शब्दों में एक छवि हो? जो शायद आपके लेआउट को तोड़ देगा।
ब्रेट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.