প্রয়োগ_ ফিল্টার () এবং the_excerpt অপ্রত্যাশিত ফলাফল দিচ্ছে


10

আমার মনে হচ্ছে এখানে অবশ্যই বেশ কিছু স্পষ্টরূপে মিস করছি, তবে আমি ওয়ার্ডপ্রেসকে সহযোগিতা পাব বলে মনে হচ্ছে না।

আমি একটি ফাংশন দিয়ে ফেসবুক ওজি ট্যাগ উত্পন্ন করছি। উদ্ধৃতি ব্যতীত সবকিছু ঠিকঠাক কাজ করে।

অবমূল্যায়ন হওয়ার পরে get_the_excerpt($post->ID), পুরো নতুন লুপটি তৈরি না করে একটি অংশ তৈরি করার অন্য কোনও উপায় আছে কি? এটা আমার কাছে অতিরিক্ত মনে হয়।

আমার প্রথম প্রবৃত্তিটি ব্যবহার করা ছিল apply_filters():

$description = apply_filters('the_excerpt', get_post($post->ID)->post_content);

এটি আমাকে পুরো পোস্ট দেয়, এইচটিএমএল-ফর্ম্যাট সামগ্রী সহ সম্পূর্ণ। ঠিক আছে, ভুল হতে হবে। সুতরাং আমি পরবর্তী যৌক্তিক ধারণা চেষ্টা করেছিলাম:

$description = apply_filters('get_the_excerpt', get_post($post->ID)->post_content);

কোন পাশা. এখন কোনও HTML নেই, তবে এটি এখনও সম্পূর্ণ পোস্ট (যা সত্যই বিভ্রান্তিকর) is

ঠিক আছে কোনো সমস্যা নেই. আসুন সমস্ত অভিনব জিনিস এড়িয়ে চলুন এবং কেবল ছাঁটাছুটি প্রবেশের জন্য যাই:

$description = wp_trim_excerpt(get_post($post->ID)->post_content);

পরিবর্তন নেই.

তো, আমার প্রশ্নটি হ'ল: হেক কি চলছে? এখানে কি কিছু মিস করছি?

কীভাবে the_excerpt()কাজ করে তা সন্ধান করতে আমি ডাব্লুপি কোরে প্রবেশ করলাম এবং এটি আমার কলটির সাথে অভিন্ন বলে মনে হচ্ছে:

/**
 * Display the post excerpt.
 *
 * @since 0.71
 * @uses apply_filters() Calls 'the_excerpt' hook on post excerpt.
 */
function the_excerpt() {
    echo apply_filters('the_excerpt', get_the_excerpt());
}

আমার অনুসন্ধানের ভিত্তিতে আমার কয়েকটি প্রশ্ন রয়েছে:

  1. প্রত্যাশার মতো ফিল্টার প্রয়োগ হচ্ছে না কেন?
  2. নতুন লুপ তৈরি না করে লুপের বাইরের অংশ পাওয়ার কোনও উপায় আছে?
  3. আমি কি পাগল?

আগাম ধন্যবাদ একবার দেখার জন্য। আমি মোটামুটি স্ট্যাম্পড, এখানে।


get_the_excerpt()অবহেলিত নয়, কেবলমাত্র অতিরিক্ত অতিরিক্ত পরম ব্যবহার করা হয় যা এটি ব্যবহার করা হয়।
মিলো

দুঃখিত, এটাই আমি বোঝাতে চাইছিলাম স্পষ্ট করার জন্য ধন্যবাদ।
জ্লেংস্টর্ফ

তুমি পাগল! । । । আমি যেমন লোল
পাইথোনিয়ান 29033

উত্তর:


16

সক্রিয় উত্তরটি ছিল wp_trim_excerpt()

এটি সংজ্ঞায়িত wp-includes/functions.php:1879:

/**
 * Generates an excerpt from the content, if needed.
 *
 * The excerpt word amount will be 55 words and if the amount is greater than
 * that, then the string ' [...]' will be appended to the excerpt. If the string
 * is less than 55 words, then the content will be returned as is.
 *
 * The 55 word limit can be modified by plugins/themes using the excerpt_length filter
 * The ' [...]' string can be modified by plugins/themes using the excerpt_more filter
 *
 * @since 1.5.0
 *
 * @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
 * @return string The excerpt.
 */
function wp_trim_excerpt($text = '') {
    $raw_excerpt = $text;
    if ( '' == $text ) {
        $text = get_the_content('');

        $text = strip_shortcodes( $text );

        $text = apply_filters('the_content', $text);
        $text = str_replace(']]>', ']]>', $text);
        $excerpt_length = apply_filters('excerpt_length', 55);
        $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
        $text = wp_trim_words( $text, $excerpt_length, $excerpt_more );
    }
    return apply_filters('wp_trim_excerpt', $text, $raw_excerpt);
}

সুতরাং পাস করা কোনও পাঠ্য প্রক্রিয়াজাত হয় না; এটি কেবল তখনই কাজ করে যদি এটিকে খালি প্যারামিটার দিয়ে ডাকা হয়।

এটি সমাধানের জন্য, আমি আমার থিমটিতে একটি দ্রুত ফিল্টার যুক্ত করেছি যা সমস্যার সমাধান করে:

/**
 * Allows for excerpt generation outside the loop.
 * 
 * @param string $text  The text to be trimmed
 * @return string       The trimmed text
 */
function rw_trim_excerpt( $text='' )
{
    $text = strip_shortcodes( $text );
    $text = apply_filters('the_content', $text);
    $text = str_replace(']]>', ']]>', $text);
    $excerpt_length = apply_filters('excerpt_length', 55);
    $excerpt_more = apply_filters('excerpt_more', ' ' . '[...]');
    return wp_trim_words( $text, $excerpt_length, $excerpt_more );
}
add_filter('wp_trim_excerpt', 'rw_trim_excerpt');

এটি কিছুটা অপ্রয়োজনীয়, তবে আমি প্রতিবার একটি উদ্ধৃতি উত্পন্ন করতে চাইলে নতুন লুপগুলি খোলার চেয়ে ভাল।


1
আহা, আপনি কেবল পাঠ্য অপারেশনটি (ডিবি থেকে আনছেন না) সন্ধান করছেন তা আমার কাছে পরিষ্কার ছিল না।
হ্যাক্রে

কোন চিন্তা করো না. আমি সবসময় ভয় করি যখন আমি প্রশ্ন জিজ্ঞাসা করি তখন আমি বোধগম্য হচ্ছি না। আমি হয়েছিল ডাটাবেস থেকে টেনে, কিন্তু আমি লুপ nother 'একটি পুরো খুলতে যেহেতু আমি ভালো জিনিস আছে চাইনি get_the_title($post->ID)পাওয়া যায়। কোডের চূড়ান্ত লাইনটি ছিল$description = wp_trim_excerpt(get_post($post->ID)->post_content);
জ্লেজস্টর্ফ

আমি এটি জিজ্ঞাসা করে সত্যিই বোকা মনে হয়, কিন্তু আপনি কিভাবে এই নতুন ফিল্টার কল? আমি এটি হিসাবে $content = apply_filters( 'rw_trim_excerpt', $content );এবং হিসাবে চেষ্টা করেছিলাম $content = rw_trim_excerpt($content);, তবে এগুলির কোনওটিই কাজ করেনি (পূর্বে আউটপুটটি ছাঁটাই করেনি এবং পরে ত্রুটি তৈরি করেছিল)।
এরিক কে

2
@QuantumDynamix এই সংশোধন করার জন্য ডিজাইন করা get_the_excerptঅনুকরণ করতে হ্যান্ডলিং the_excerptযাতে আপনি কল করতে পারেন: apply_filters('get_the_excerpt', $content);
জ্লেংস্টর্ফ

রাম রাম! একটি wpress noob এর দৃষ্টিকোণ থেকে দুর্দান্ত এক, ধন্যবাদ
pythonian29033

1

চেষ্টা করুন:

   get_post($post->ID)->post_excerpt
                        ^^^^^^^^^^^^

দেখুন: সমস্ত উপলব্ধ রিটার্ন সদস্যদের জন্য get_postকোডেক্স


4
পোস্টটির জন্য কোনও অংশ প্রবেশ করা না হলে এটি ফাঁকা ফিরে আসে। আমাকে get_the_excerpt () এর ক্রিয়াকলাপগুলি নকল করতে হবে (কোনটি উপস্থিত না থাকলে একটি অংশ তৈরি করা)।
জেলেংস্টর্ফ

ফিল্টার প্রয়োগ করা তা করবে না, তাই আপনি ভুল প্রশ্ন জিজ্ঞাসা করছেন। কোনও কিছু না থাকলে আপনি কেন একটি উদ্ধৃতি সন্ধান করছেন তা ধারণা নেই। get_the_excerpt()এটি অনুকরণ করে না, উত্সটি পরীক্ষা করুন, এটি কেবল $postযার সদস্যের পরিবর্তনশীলটি অ্যাক্সেস করছে post_excerpt। উত্তরে কোডেক্স লিঙ্কটিও দেখুন।
হ্যাক্রে

3
কোডেক্স এন্ট্রি অন থেকে the_excerpt: "এটি একটি স্বয়ংক্রিয় অংশ প্রদর্শন করবে যা পোস্টের সামগ্রীর প্রথম 55 টি শব্দকে বোঝায়।" আমি লুপের বাইরে সেই আচরণটি নকল করতে চাইছি।
জ্লেঞ্জারস্টফ

অস্থায়ীভাবে দ্বিতীয় লুপ তৈরি করুন এবং এর আইডি দ্বারা ফাইলটি ক্যোয়ারী করুন সম্ভবত কোনও দ্রুত সমাধানের জন্য। সেকেন্ডারি লুপগুলি দেখুন - কোডেক্স.ওয়ার্ডপ্রেস.আর.
ফাংশন_প্রকাশ

1
লিঙ্কের জন্য ধন্যবাদ। আমি জানতাম আমি একটি অতিরিক্ত লুপ সেট আপ করতে পারি, তবে এটি ওভারকিলের মতো বলে মনে হচ্ছে। আমার সমাধানটি একটি ফিল্টার যুক্ত করছিল। আমি এটি এখন অনেক কম কোডের জন্য এখন একটি ছোট কনুই গ্রীস হিসাবে দেখছি।
জ্লেংস্টর্ফ

0

আপনি সামগ্রীটি ফিল্ট করতে আমার কাস্টম ফাংশনটি ব্যবহার করতে পারেন (এটি নার্গা ফ্রেমওয়ার্ক থেকে )

  • পোস্টে যদি কাস্টম সংক্ষিপ্তসার থাকে তবে এর পরিবর্তে সামগ্রীটি প্রদর্শন করুন
  • পোস্টটিতে কাস্টম সার্টিফিকেট না থাকলে কনটেন্ট থেকে স্বয়ংক্রিয় উত্স তৈরি করা হয়
  • স্বতঃ ট্রিম শর্টকোড, এইচটিএমএল কোড, সরান [...], "আরও পড়ুন" পাঠ্য যুক্ত করুন (অনুবাদযোগ্য)

        /**
        * Auto generate excerpt from content if the post hasn't custom excerpt
        * @from NARGA Framework - http://www.narga.net/narga-core
        * @param $excerpt_lenght  The maximium words of excerpt generating from content
        * @coder: Nguyễn Đình Quân a.k.a Narga - http://www.narga.net
        **/  
        function narga_excerpts($content = false) {
        # If is the home page, an archive, or search results
        if(is_front_page() || is_archive() || is_search()) :
            global $post;
        $content = $post->post_excerpt;
        $content = strip_shortcodes($content);
        $content = str_replace(']]>', ']]>', $content);
        $content = strip_tags($content);
        # If an excerpt is set in the Optional Excerpt box
        if($content) :
            $content = apply_filters('the_excerpt', $content);
        # If no excerpt is set
        else :
            $content = $post->post_content;
            $excerpt_length = 50;
            $words = explode(' ', $content, $excerpt_length + 1);
        if(count($words) > $excerpt_length) :
            array_pop($words);
            array_push($words, '...<p><a class="more-link" href="' . get_permalink() . '" title="' . the_title_attribute('echo=0') . '">  ' . __( 'Read more &#187;', 'narga' ) . ' </a></p>');
            $content = implode(' ', $words);
        endif;
        $content = '<p>' . $content . '</p>';
        endif;
        endif;
        # Make sure to return the content
        return $content;
        }
        // Add filter to the_content
        add_filter('the_content', 'narga_excerpts');
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.