একটি লুপের বাইরে get_the_excerpt ব্যবহার করে উদ্ধৃতি পান


31

আমার কাছে একটি কোড রয়েছে যা কল করে get_the_title()এবং এটি কাজ করে তবে get_the_excerpt()খালি ফিরে আসে। আমি কীভাবে এটি কাজ করতে পারি?

এই কোডটি "ডাব্লুপি ফেসবুক ওপেন গ্রাফ প্রোটোকল" নামে একটি প্লাগইনের ভিতরে রয়েছে। আমি যে অংশটি পরিবর্তন করতে চাই তা এখানে:

if (is_singular('post')) {
  if (has_excerpt($post->ID)) {
    echo "\t<meta property='og:description' content='".esc_attr(strip_tags(get_the_excerpt($post->ID)))."' />\n";
  }else{
    echo "\t<meta property='og:description' content='". [?] ."' />\n";
  }
}else{
  echo "\t<meta property='og:description' content='".get_bloginfo('description')."' />\n";
}

এখানে has_excerptসর্বদা ব্যর্থ হোন এবং get_the_excerpt($post->ID)আর কাজ করবেন না (অবনমিত)।

সুতরাং, আমি কীভাবে সেখানে অংশটি প্রদর্শন করতে পারি?

PS: আমি পাশাপাশি "অ্যাডভান্সড অংশগুলি" ব্যবহার করছি


ঠিক আছে, এটি ওয়ার্ডপ্রেস.স্ট্যাকেক্সেঞ্জারmy_excerpt($post->post_content, get_the_excerpt())my_excerpt()
ক্র্যাশনস

3
দয়া করে একটি উত্তর যুক্ত হিসাবে আপনি যে সমাধানটি দিয়েছিলেন সেগুলি যুক্ত করুন, সুতরাং এটি সাইটটিকে উত্তর না দেওয়া প্রশ্ন হিসাবে বিরক্ত করে না। :)
বিরল

the_post()আপনি get_the_excerpt()এটি কল করার আগে কেবল এটি (একক পোস্ট টেম্পলেটটিতেও কাজ করে) ফাংশনটি ব্যবহার করুন আপনার জন্য প্রয়োজনীয় ডেটা সেটআপ করবে।
সিসির

উত্তর:


29

পোস্ট অবজেক্ট ছাড়াই কীভাবে এটি করা যায় তা দেখার সময় আমি এই প্রশ্নটি পেয়েছি ।

আমার অতিরিক্ত গবেষণা এই চতুর কৌশলটি চালু করেছে:

$text = apply_filters('the_excerpt', get_post_field('post_excerpt', $post_id));


1
এটি উত্তর হিসাবে গ্রহণ করা উচিত কারণ এটি লুপের বাইরে ডেটা টানানোর প্রস্তাবিত উপায়। এছাড়াও $postগ্লোবাল ভেরিয়েবলের কোনও কাস্টম ফাংশন বা ওভাররাইডিংয়ের প্রয়োজন হয় না ।
ম্যাককে

4
এটি খালি স্ট্রিং ফিরে।
কিউ টুন

1
@KyawTun - এটা কাজ করে, তাই যতদিন $post_idসেট করা হয় (যা মান $post_idএবং? $post_idএকটি বৈধ, বৈধ পোস্টে আইডি নয়।
cale_b

2
ধন্যবাদ ক্যাল_বি ধন্যবাদ আমি get_posts ক্যোয়ারী ব্যবহার করি এবং ফলাফল অ্যারে থেকে আইডি পাই। পোস্ট অবজেক্টে পোস্ট_টাইটেল, পোস্ট_ কনটেন্ট, আইডি ইত্যাদি রয়েছে তবে কাজ করছে না।
কিউ টুন

আপনার যদি টেক্সট জাস্ট দরকার এবং <p> ট্যাগটি যা_এক্সটারপ ফিল্টারের সাথে অন্তর্ভুক্ত থাকে তবে "get_the_excerpt" ফিল্টারটি ব্যবহার করুন, যাতে উপরের ফিল্টারটি হয়: $ পাঠ্য = প্রয়োগ_ফিলার্স ('get_the_excerpt', get_post_field ('post_excerpt', $ post_id) ); এটি আপনাকে কেবলমাত্র র পাঠ্য দেবে যা আপনি নিজের মার্কআপে যে কোনও জায়গায় sertোকাতে পারেন।
মহসিন

22

যেহেতু মনে হচ্ছে আপনার ইতিমধ্যে পোস্ট অবজেক্টটি আপনার জন্য উদ্ধৃত অংশের প্রয়োজন, আপনি কেবল জিনিসগুলিকে কাজ করতে বাধ্য করতে পারেন:

setup_postdata( $post );
$excerpt = get_the_excerpt();

setup_postdata()ফাংশন globalize হবে $postবস্তু এবং এটা নিয়মিত পুরাতন লুপ ফাংশন জন্য উপলব্ধ করুন। আপনি যখন লুপটির অভ্যন্তরে থাকবেন, আপনি কল করেন the_post()এবং এটি আপনার জন্য জিনিসগুলি সেট করে ... লুপের বাইরে আপনাকে এটিকে নিজেই জোর করে নেওয়া দরকার।


1
এটি কাজ করে কিন্তু: "আপনাকে অবশ্যই বিশ্বব্যাপী $postভেরিয়েবলের একটি রেফারেন্স পাস করতে হবে , অন্যথায় ফাংশনগুলি the_title()সঠিকভাবে কাজ করে না" " global $post;$post = $post_object;setup_postdata( $post );$excerpt = get_the_excerpt();
দেচ

setup_postdata($post);FTW এর !!!!
স্কয়ারকাণ্ডি

18

এটা চেষ্টা কর:

ফাংশন.ফ্পে একটি নতুন ফাংশন তৈরি করুন এবং তারপরে যেকোন স্থান থেকে কল করুন।

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id); //Gets post ID
    $the_excerpt = $the_post->post_content; //Gets post_content to be used as a basis for the excerpt
    $excerpt_length = 35; //Sets excerpt length by word count
    $the_excerpt = strip_tags(strip_shortcodes($the_excerpt)); //Strips tags and images
    $words = explode(' ', $the_excerpt, $excerpt_length + 1);

    if(count($words) > $excerpt_length) :
        array_pop($words);
        array_push($words, '…');
        $the_excerpt = implode(' ', $words);
    endif;

    $the_excerpt = '<p>' . $the_excerpt . '</p>';

    return $the_excerpt;
}

কোড বর্ণনামূলক একটি পোস্ট এখানে।


1
দুর্দান্ত আমার বন্ধু খুঁজে। আমি কখনই বুঝতে পারি নি যে ওয়ার্ডপ্রেস কেন এই জাতীয় সমালোচনা ফাংশনকে অবমূল্যায়ন করবে। এটি কার্যকরভাবে স্ক্র্যাচ থেকে এটি পুনর্নির্মাণ করছে, তবে এটি কার্যকর হয়। সামাজিক অংশীদারি প্লাগইনগুলির মতো বৈশিষ্ট্যগুলি সহ আমরা লুপের বাইরে কতবার অংশ ব্যবহার করি তা প্রদত্ত, এটি সম্ভবত মূল অংশ হিসাবে থাকা উচিত ছিল।
ইমপ্রিটিভ আইডিয়াস

1
এএএমএএন-এর উত্তর হ'ল এই সমস্যার পক্ষে আরও ভাল পদ্ধতি এবং এটিকে সেরা অনুশীলন হিসাবে বিবেচনা করা উচিত। এই পদ্ধতিরটি মূলত এপিআই ব্যবহার না করে কোর এর ইন্টার্নালগুলি নকল করছে।
ইয়ান ডান

9

এখন আপনি কেবল get_the_excerpt( $postID )ফাংশনটি ব্যবহার করতে পারেন । যেহেতু: ওয়ার্ডপ্রেস 4.5.0 $postপ্যারামিটারটি চালু করেছে ।


1
আমরা ডাব্লুপিপি 4.5 + এর যুগে থাকাকালীন এটি নতুন স্বীকৃত উত্তর হওয়া উচিত।
মাতিজা মরকাইচ

18
এই অংশটি খালি থাকলে এটি কাজ করবে না কারণ wp_trim_excerptফিল্টারটি বর্তমান পোস্টের জন্য উদ্ধৃতিগুলি ফিরিয়ে দেবে।
ডিলান

9
@ ডিলান যা বলেছে সে সম্পর্কে বিস্তারিত জানতে কোর.ট্রোক.ওয়ার্ডপ্রেস.আর.টিক / 69 34 34৯৪৪ দেখুন
ক্র্যাফটনার

5

লুপের বাইরে the_excerpt () পেতে wp_trim_excerptmy_excerpt($post->post_content, get_the_excerpt()) ব্যবহার করে my_excerpt()ফাংশনটি ব্যবহার এবং ব্যবহার করে পেয়েছি


2
লিঙ্ক-কেবল উত্তরগুলি ভাল নয়। এখানে প্রাসঙ্গিক কোড অনুলিপি করুন। যখন সেই লিঙ্কটি নষ্ট হয়ে যায়, তখন সেই সাইটটি ডাউন / চলে যায়, তবে এই উত্তরের কোনও মূল্য নেই।
cale_b

এটা আমার জন্য পুরোপুরি কাজ করেন!
সৈকত

1

যদি আপনার পোস্ট অবজেক্ট না থাকে তবে উইথার্সের মতো এখানে একটি সংক্ষিপ্ত ফাংশন রয়েছে।

function get_excerpt_by_id($post_id){
    $the_post = get_post($post_id);
    $the_excerpt = $the_post->post_excerpt; 
    return $the_excerpt;
}

প্রশ্নটিতে বর্ণিত হিসাবে প্রশ্নকর্তার একটি পোস্ট অবজেক্ট রয়েছে।
ফুসিয়া

3
আমি ভুল হলে আমাকে সংশোধন করুন, এই পদ্ধতিটি ম্যানুয়াল অংশটি ফিরিয়ে দেবে তবে প্রয়োজনে একটি উত্পন্ন করবে না
বিল

1

আপনি যখন get_the_excerpt()লুপের বাইরে ব্যবহার করতে চান এটি এর জন্য :

function custom_get_excerpt($post_id) {
    $temp = $post;
    $post = get_post($post_id);
    setup_postdata($post);

    $excerpt = get_the_excerpt();

    wp_reset_postdata();
    $post = $temp;

    return $excerpt;
}

এটি করার জন্য এটি সর্বাধিক প্রত্যক্ষ উপায় .. নিশ্চিত না এটি দুর্দান্ত পারফরম্যান্সের ভিত্তিতে। আপনি এখনও আমার +1 পান
বিল

1

আপনি যদি এক লাইনে থাকা সামগ্রী থেকে স্বয়ংক্রিয়ভাবে অংশটি উত্পন্ন করতে চান - আপনি wp_trim_wordsএই জাতীয় ফাংশনটি ব্যবহার করতে পারেন :

// 30 is the number of words ehere
$excerpt = wp_trim_words(get_post_field('post_content', $post_id), 30);

-1
$trimexcerpt = get_the_content();
$shortexcerpt = wp_trim_words( $trimexcerpt, $num_words = 18, $more = '… ' ); 
echo $shortexcerpt;

দয়া করে আপনার উত্তর সম্পাদনা করুন , এবং একটি ব্যাখ্যা যুক্ত করুন: কেন এটি সমস্যার সমাধান করতে পারে?
ফুসিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.