কীভাবে একটি শব্দের চেয়ে বাক্য দিয়ে অংশটি শেষ করা যায়?


15

এখানে আমার হোম পেজে পোস্টের সংক্ষিপ্তসার রইল। আমি একটি বাক্য দিয়ে অংশটি শেষ করতে চাই। এই ক্ষেত্রে এটি 'সুযোগ। '। আমি দৈর্ঘ্যটি কীভাবে সংশোধন করতে হয় তা জানি তবে এটি যা চায় তা করবে না won't

এখানে চিত্র বর্ণনা লিখুন

এখানে অন্য ওয়েবসাইট থেকে উদ্ধৃত অংশ। এখানে আপনি সংক্ষিপ্ত বিবরণ উপরোক্ত ভিন্ন মত একটি সঠিক বাক্য দিয়ে শেষ হবে যা পরের বাক্যটির প্রথম শব্দ 'প্র্যাকটিভলি' দিয়ে শেষ হবে।

এখানে চিত্র বর্ণনা লিখুন

জিএম দ্বারা সমাধানটি কার্যকর করার পরে : -

এখানে চিত্র বর্ণনা লিখুন


দয়া করে এর চেয়ে ভাল আপনার সমস্যাটি ব্যাখ্যা করুন। তাদের উপর দেওয়া উত্তর এবং মন্তব্য থেকে আপনি কী অর্জন করতে চান তা বোঝা শক্ত।
কায়সার

@ কেজার আমি বিশদটি আপডেট করেছি।
মোহিত 14 ই

@ মোহিত আপনি আমার কোড চেষ্টা করেছেন?
গাজাজ্যাপ

হ্যাঁ, উদ্ধৃতি বাক্য দিয়ে শেষ হয় তবে 'আরও পড়ুন' চলে গেল।
মোহিত

@ জিএম ঠিক আছে এর বদলে আমাকে আরও পড়তে হবে।
মোহিত

উত্তর:


13

এটি পিএইচপি 5.3+ প্রয়োজন (ডাব্লুপিএইচপি পিএইচপি 5.2.4+ প্রয়োজন)

add_filter('get_the_excerpt', 'end_with_sentence');

function end_with_sentence($excerpt) {
  $allowed_end = array('.', '!', '?', '...');
  $exc = explode( ' ', $excerpt );
  $found = false;
  $last = '';
  while ( ! $found && ! empty($exc) ) { 
    $last = array_pop($exc);
    $end = strrev( $last );
    $found = in_array( $end{0}, $allowed_end );
  }
  return (! empty($exc)) ? $excerpt : rtrim(implode(' ', $exc) . ' ' .$last);
}

সম্পাদন করা

@ কাইজার মন্তব্যের পরে আমি অনেকগুলি পোস্ট দেখানোতে পৃষ্ঠাকে ধীরে ধীরে প্রতিরোধ করতে সেভ / আপডেট এ চালানোর চেষ্টা করি। এটি পরীক্ষা করা উচিত

add_filter('wp_insert_post_data', 'end_with_sentence_on_save', 20, 2);

function end_with_sentence_on_save($data, $postarr) {
  if ( ! empty( $data['post_content'] ) && $data['post_status'] != 'inherit' && $data['post_status'] != 'trash' ) {
    $text = strip_shortcodes( $data['post_content'] );
    $text = apply_filters('the_content', $text );
    $text = str_replace(']]>', ']]>', $text );
    $excerpt_length = apply_filters('excerpt_length', 55);
    $data['post_excerpt'] = wp_trim_words($text, $excerpt_length, '');
  } else {
    return $data;
  }
  $allowed_end = array('.', '!', '?', '...');
  $exc = explode(' ', $data['post_excerpt']);
  $found = false;
  $last = '';
  while ( ! $found && ! empty($exc) ) { 
    $last = array_pop($exc);
    $end = strrev( $last );
    $found = in_array( $end{0}, $allowed_end );
  }
  if (! empty($exc)) $data['post_excerpt'] = rtrim(implode(' ', $exc) . ' ' .$last);
  return $data; 
}

1
নিশ্চিত করুন যে সম্পর্কে: $end{0}? বিটিডব্লিউ, আপনি কেবল ফিরে আসতে পারেন বা breakযখন কিছু পাওয়া যায়। অতিরিক্ত দ্রষ্টব্য: পোস্টটি সংরক্ষণ করার সময় এটির থেকে ভাল এটি হতে পারে, তাই এটি রানটাইমের সময় পুনরুত্থিত হয় না, যা আপনি প্রচুর পোস্ট প্রদর্শন করলে বেশ ধীর হয়ে যায়।
কায়সার

@ কাইজার উক্তি: একই উদ্দেশ্যে স্ট্রিংগুলি ব্রেস ব্যবহার করে অ্যাক্সেস করা যেতে পারে $ স্ট্রিং {42। হিসাবে in php.net ডক্স কিছু খুঁজে পেতে আমাকে শেষ স্ট্রিংয়ের সর্বশেষ চরটি সন্ধান করতে হয়েছিল। ব্যবহার করে $foundআমি চক্রটি ভেঙে ফেলেছি এবং শেষ স্ট্রিংটি পরীক্ষা করে দেখি , তাই দরকার নেই break
গাজাজ্যাপ

পুরোপুরি মিস হয়েছে যে এটি একটি whileচেকিং false। +1
কায়সার

আপনার মন্তব্যের দ্বিতীয় অংশের জন্য @ কাইজার +1, এখন আমি সংরক্ষণ সম্পাদনা করতে কোডটি সম্পাদনা করি
গাজাজাজাপ

1
অবশ্যই @ জেসিকা একটি খারাপ সম্পাদনা ছিল (মূল সংস্করণে এটি ঠিক ছিল)। ধন্যবাদ, স্থির।
গাজাজ্যাপ

2

এখানে সমস্ত সংস্করণটি এইচটিএমএল ট্যাগ রেখে এবং বাক্যটির শেষ শব্দের পরে সামগ্রীটি ছাঁটাচ্ছে

if ( ! function_exists( 'pietergoosen_custom_wp_trim_excerpt' ) ) : 

    function pietergoosen_custom_wp_trim_excerpt($pietergoosen_excerpt) {
    global $post;
    $raw_excerpt = $pietergoosen_excerpt;
        if ( '' == $pietergoosen_excerpt ) {

            $pietergoosen_excerpt = get_the_content('');
            $pietergoosen_excerpt = strip_shortcodes( $pietergoosen_excerpt );
            $pietergoosen_excerpt = apply_filters('the_content', $pietergoosen_excerpt);
            $pietergoosen_excerpt = str_replace(']]>', ']]>', $pietergoosen_excerpt);

            //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', $pietergoosen_excerpt, $tokens);

                foreach ($tokens[0] as $token) { 

                    if ($count >= $excerpt_word_count && 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;
                }

            $pietergoosen_excerpt = trim(force_balance_tags($excerptOutput));

                $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($pietergoosen_excerpt, '</');
                //if ($pos !== false)
                // Inside last HTML tag
                //$pietergoosen_excerpt = substr_replace($pietergoosen_excerpt, $excerpt_end, $pos, 0);
                //else
                // After the content
                $pietergoosen_excerpt .= $excerpt_end;

            return $pietergoosen_excerpt;   

        }
        return apply_filters('pietergoosen_custom_wp_trim_excerpt', $pietergoosen_excerpt, $raw_excerpt);
    }

endif; 

remove_filter('get_the_excerpt', 'wp_trim_excerpt');
add_filter('get_the_excerpt', 'pietergoosen_custom_wp_trim_excerpt'); 

0

কেউ যদি উত্তর, পরামর্শের শব্দ ব্যবহার করে থাকে তবে এটি উন্নত কাস্টম ক্ষেত্রগুলিকে নষ্ট করবে। wp_insert_post_dataক্ষেত্র তৈরি বা আপডেট করার সময় এসিএফও আহ্বান জানায় , তবে $dataভেরিয়েবলটি এক রকম হয় না এবং এর ফলে এসিএফ ফিল্ডের নামটি কিছু অপঠনযোগ্য জিব্বারিশে পরিণত হয়, ফলস্বরূপ ক্ষেত্রটি ব্যবহার করতে সক্ষম হয় না।

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