आईडी द्वारा अंश प्राप्त करें


31

ऐसा क्यों है कि शीर्षक और अधिकांश अन्य तत्वों के साथ आईडी द्वारा अंश प्राप्त नहीं किया जा सकता है।

जैसे। get_the_excerpt (ID)। मुझे पता है कि $ पोस्ट के साथ इसका उपयोग कैसे किया जा सकता है- post_excerpt फ़ंक्शन, लेकिन यह सामग्री का हिस्सा नहीं लौटाता है यदि कोई अंश इसमें दर्ज नहीं किया गया था, तो यह कुछ भी नहीं देता है।

तो मैं जो करने की कोशिश कर रहा हूं, अगर कोई अंश है, तो आईडी द्वारा अंश प्राप्त करना है, और यदि उस आईडी के साथ कोई अंश नहीं है, लेकिन कुछ सामग्री है, तो इसके बजाय कुछ सामग्री प्राप्त करें।

कोई ऐसा कैसे करेगा।

कोई विचार,

अद्भुत ...

EDIT -

अनुरोध के रूप में लूप स्रोत कोड।

<?php $stories = get_posts('category_name=feedback&numberposts=4'); 
            foreach ($stories as $post) :
            $title = $post->post_title;
            $excerpt = get_the_excerpt_id($post->ID);
            $thumb = get_the_post_thumbnail($post->ID,array(60, 60, true));?>
              <div class="textstandard_white" style="font-size:14px; line-height:22px; padding-top:10px;"><b><a href="<?php echo get_permalink($post->ID);?>"><?php echo $title;?></a></b></div><div align="left" style="height:18px; width:82px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars.png) left top no-repeat;"><div id="stars<?php echo $post->ID;?>" align="left" style="height:18px; background:url(http://www.divethegap.com/update/z-images/structure/icons/stars_glow.png) left top no-repeat;">
                  </div>
                  </div>

                  <script type="text/javascript">
                var width<?php echo $post->ID;?> = ((<?php
$Rating = get_post_meta($post->ID, "Rating", true);
echo $Rating;
?> * 20) + '%')
                  $('#stars<?php echo $post->ID;?>').css('width', width<?php echo $post->ID;?>);

                 </script><div class="textstandard_white" style="padding-top:6px; font-size:10px; color:#BBB; padding-bottom:10px; border-bottom:1px dotted #BBB; min-height:70px;"><div style="float:left; padding-right:6px; padding-bottom:6px;"><div style="background:#FFF; border:1px solid #FFF;
border-radius: 4px; -moz-border-radius: 4px ; -webkit-border-radius: 4px; padding:4px;"><a href="<?php echo get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>



<?php echo $excerpt;?></div>
              <?php endforeach;?>

क्या वास्तव में सामग्री का "कुछ" है?
कैसर

वर्डप्रेस में अंश फ़ंक्शन किसी पोस्ट का अंश देता है। यदि पोस्ट में कोई अंश नहीं है, तो यह '...' या 'अधिक पढ़ें' या जो भी टेम्पलेट प्रदान करता है, उसके कुछ निश्चित वर्णों की एक निश्चित संख्या देता है
रॉबिन I नाइट

1
PITA नहीं है, लेकिन समुदाय के नियम हस्ताक्षर और मानक बंद को अस्वीकार करते हैं। इसलिए नियमों का पालन करें और जेफ एटवुड आपके सभी सवालों को संपादित करने के बाद आपको एक कठोर संदेश भेजने से बचें , कृपया एक समापन के रूप में "अद्भुत" का उपयोग करना बंद करें। (और कृपया मैसेंजर को शूट न करें)
माइकशिंकेल

जवाबों:


20

हाय @ रॉबिन आई। नाइट:

मैं get_the_excerpt()विरासत डिजाइन के साथ एक समारोह के रूप में देखता हूं । जैसा कि वर्डप्रेस उपयोग बढ़ा है, कई नए उपयोग-मामले हैं जहां यह फिट नहीं होता है, लेकिन जहां नए डेटा अलग-अलग डेटा प्राप्त करने के लिए कार्य करते हैं। एक उदाहरण $argsफ़ंक्शन विकल्पों की एक सरणी का अब लगातार उपयोग है ।

लेकिन अपनी आवश्यकताओं के लिए इसे ठीक करना आसान है। यहां एक वैकल्पिक फ़ंक्शन है जिसका उपयोग आप अपनी थीम की functions.phpफ़ाइल में कहीं भी कर सकते हैं :

function robins_get_the_excerpt($post_id) {
  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;
}

मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे पूरा यकीन है कि मैं सही हूं। यदि यह आपकी आवश्यकताओं को पूरा नहीं करता है तो कृपया विस्तृत करें और शायद मैं अन्य सुझाव दे सकूं।


यह काम करता हैं। की तरह। बहुत ही अजीब परिणाम। यह निश्चित रूप से अपना कार्य कर रहा है लेकिन परिणाम विषम हैं। मैं इसे GET_Posts के साथ संयोजन में उपयोग कर रहा हूं और किसी कारण से शीर्ष 2 के पद हमेशा समान होते हैं। यहाँ एक लिंक है और आप देखेंगे कि मेरा क्या मतलब है। दाहिने हाथ की ओर 4 पदों को देखें। divethegap.com/update/community/feedback/2010/06/steve-riches
रॉबिन I नाइट

@ रॉबिन I नाइट: कृपया अपने प्रश्न के अपडेट के रूप में अपना लूप सोर्स कोड पोस्ट करें; कोड देखे बिना कोड को डीबग करना बहुत कठिन है। यह संभवतः एक प्लगइन भी है जो समस्या पैदा कर रहा है; उन्हें एक बार में अक्षम करने का प्रयास करें।
माइकस्किंकेल

ऊपर दिए गए प्रश्न में लूप स्रोत कोड ^^
रॉबिन I नाइट

BTW I ने फ़ंक्शन का नाम get_the_excerpt_id ($ post_id) में बदल दिया
रोबिन I नाइट

@ रॉबिन I नाइट - मुझे आपके लूप में कुछ भी दिखाई नहीं दे रहा है, लेकिन हो सकता है कि आप setup_postdata($post)अपने लूप की शुरुआत में कॉल करने की कोशिश करें, जैसा कि @Rostst बताता है। यदि वह काम नहीं करता है तो यह एक प्लगइन हो सकता है जिसे आपको अक्षम करने की आवश्यकता है; क्या आपने कोशिश की है? और आप शायद इसे कॉल नहीं करना चाहते get_the_excerpt_id()क्योंकि वर्डप्रेस भविष्य में उस फ़ंक्शन को जोड़ सकता है और आपकी साइट को तोड़ सकता है। और आप संभवतः foreach($stories as $story): global $post; $post = $story;इसके बजाय अपने लूप में फ़ंक्शन के बिना कर सकते थे ।
माइकस्किंकेल

16

अंश के यांत्रिकी बेहद भ्रामक हैं। यह आपके प्रश्न का सटीक उत्तर नहीं है, लेकिन सामान्य तौर पर यदि आपको टेम्पलेट टैग बनाने की आवश्यकता होती है, तो लूप के लिए विशिष्ट, get_posts()आपके द्वारा लौटाए गए सरणी के साथ काम करना इस तरह लूप का अनुकरण कर सकता है:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();

wp_reset_query () के बारे में क्या; ?
cwd

1
@cwd यदि केवल setup_postdata()वैश्विक क्वेरी का उपयोग प्रभावित नहीं होता है और केवल पोस्ट डेटा को रीसेट करने की आवश्यकता है।
रारस्ट

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

धन्यवाद @Rarst जिसने मेरी मदद की। Setup_postdata ($ पोस्ट) जोड़ना; मेरे मुद्दों को हल किया
शमौन

8

3.3.0 के बाद से एक नया कार्य है: wp_trim_words

मैं इसे लूप के बाहर इस प्रकार उपयोग कर रहा हूं:

 <?php if ( $post_id ) {
 $post = get_post( $post_id );
 if ( $post ) { ?>
     <h2><?php echo $post->post_title; ?></h2>
     <p><em><?php echo wp_trim_words( $post->post_content ); ?></em></p>
     <p><strong>This article can only be read by subscribers.</strong></p>
 <?php } } ?>

यह wp_trim_excerpt के साथ भ्रमित होने की नहीं है जो जाहिरा तौर पर केवल लूप के भीतर काम करता है, क्योंकि यह आंतरिक रूप से (thecontent) कॉल करता है।


6

सिर्फ माइकस्किंकल के जवाब में जोड़ने के लिए, जो किसी कारण से मेरे लिए काम नहीं करेगा। मुझे इसे बनाने के लिए setup_postdata लाइन को जोड़ना पड़ा।

function get_the_excerpt( $post_id ){

  global $post;  
  $save_post = $post;
  $post = get_post($post_id);
  setup_postdata( $post ); // hello
  $output = get_the_excerpt();
  $post = $save_post;
  return $output;

}

मैं मान रहा हूँ अगर आप इसे लूप के बाहर प्रयोग कर रहे हैं तो इसे अन्य setup_postdata के साथ हस्तक्षेप नहीं करना चाहिए।

चियर्स


मैंने माइकस्किंकेल के जवाब की कोशिश की और यह मेरे लिए काम नहीं आया। पोस्ट डेटा सेट करने के लिए चाल चली। 'Setup_postdata' के बिना मेरे मामले में फ़ंक्शन ने मूल पद का शीर्षक + उद्धरण लौटा दिया।
तर्जिफ़र

2

@ मैक्सिम के जवाब पर बिल्डिंग, क्या यह काम करेगा?

$post = get_post( $id );

$excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;

यह मेरे लिए काफी आगे सीधे लगता है, लेकिन मैं सोच रहा हूं कि क्या मुझे कुछ याद आ रहा है।


1

यदि आपके सभी पोस्ट में <!--more-->टैग है, तो आप अपने कोड के साथ निम्नलिखित का उपयोग कर सकते हैं:

$sjc_excerpt = explode( '<!--more-->', $post->post_content); 
echo wpautop( $sjc_excerpt[0] );

बेशक यदि आपके पास कोई पोस्ट है जिसमें <!--more-->टैग नहीं है , तो उन्हें उनकी संपूर्णता में दिखाया जाएगा। मेरी स्थिति में काम करता है, लेकिन सभी के लिए नहीं ...


1

मैं get_the_excerpt()विरासत डिजाइन के साथ एक समारोह के रूप में देखता हूं । जैसा कि वर्डप्रेस उपयोग बढ़ा है, कई नए उपयोग-मामले हैं जहां यह फिट नहीं होता है, लेकिन जहां नए डेटा अलग-अलग डेटा प्राप्त करने के लिए कार्य करते हैं। एक उदाहरण $argsफ़ंक्शन विकल्पों की एक सरणी का अब लगातार उपयोग है ।

लेकिन अपनी आवश्यकताओं के लिए इसे ठीक करना आसान है। यहां एक वैकल्पिक फ़ंक्शन है जिसका उपयोग आप अपने थीम में कहीं भी रख सकते हैंfunctions.phpफ़ाइल :

function robins_get_the_excerpt($post_id) {
   global $post;  
   $save_post = $post;
   $post = get_post($post_id);
   $output = get_the_excerpt();
   $post = $save_post;
   return $output;
}

सिर्फ माइकस्किंकल के जवाब में जोड़ने के लिए, जो किसी कारण से मेरे लिए काम नहीं करेगा। मुझे इसे बनाने के लिए setup_postdata लाइन को जोड़ना पड़ा।


क्या यह wp_reset_post_data()लूप के अंदर काम करने की आवश्यकता है?
क्रिस पिंक

जाहिर है (इस विशेष घर के चारों ओर जाने के बाद) यह अब कोर का हिस्सा है।
क्रिस पिंक

0

यह एक छोटा सा दो-लाइनर है जो मैं wp_trim_words का बहुत उपयोग करता हूं । मैं लगातार अपने आप को संक्षिप्त नाम ढूंढ रहा हूं और लूप के बाहर अधिक कार्यक्षमता पढ़ता हूं। कुछ अन्य को यह उपयोगी लग सकता है। तो यह है कि मैं क्या करने के लिए उपयोग:

  1. पोस्ट आईडी द्वारा अंश प्राप्त करें
  2. पोस्ट सामग्री प्राप्त करें यदि कोई अंश निर्धारित नहीं किया गया है,
  3. अंश की शब्द लंबाई निर्धारित करें
  4. अधिक पढ़ें (लिंक / पाठ) के लिए सामग्री चुनें

मैं इस इनलाइन को सीधे कस्टम टेम्पलेट में संपादित कर रहा हूं।

    //Get Post Object
    $dapost = get_post(POST_ID);              
    //Get the Execerpt
    $my_excerpt = wp_trim_words( apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content  ), "20", "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>" );

विभाजन

1. अंश सामग्री

पोस्ट आईडी द्वारा अंश प्राप्त करें लेकिन, पोस्ट सामग्री प्राप्त करें यदि कोई अंश निर्धारित नहीं किया गया है।

मैं if / Else PHP शॉर्टहैंड का उपयोग कर रहा हूं

    $dapost = get_post(POST_ID);    
    apply_filters( "the_excerpt", get_the_excerpt($dapost) ? get_the_excerpt($dapost) : $dapost->post_content

2. शब्द की लंबाई

20 अंश में शब्दों की मात्रा निर्धारित करें

    "20"

3. ReadMore कंटेंट (लिंक / टेक्स्ट) चुनें

   "<a href='$dapost->guid'> ".__('Get More Stuff', 'translation')."</a>"

मैं $dapost->guidURL प्राप्त करता था, क्योंकि मुझे दोस्ताना URL की आवश्यकता नहीं थी, और DB के लिए किसी अन्य कॉल से बचना चाहता था। आप हमेशा get_the_permalink का उपयोग कर सकते हैं।

Wordpress प्रलेखन में wp_trim_words देखें ।




-2

यह तेज़ है:

global $post;
return get_post($post_id)->post_excerpt;

1
नहीं जब अंश खाली हो ... जैसा कि प्रश्न में उल्लेख किया गया है।
FUXIA

वास्तव में जब कोई अपवाद स्वतः उत्पन्न नहीं होता है
जोश

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