問題描述

為什麼人們不能像標題和大多數其他元素一樣獲得 ID 的摘錄。

例如。 get_the_excerpt(ID) 。我知道如何使用 $ post-> post_excerpt 函式,但是如果沒有輸入任何摘錄,那麼它不會返回部分內容。

所以我想要做的是獲取摘錄的 ID,如果有一個摘錄,如果沒有摘錄與該 ID,但有一些內容,以獲得一些內容。

怎麼會這樣做

有任何想法嗎,

奇妙的…

編輯 –

迴圈原始碼被請求。

<?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%20echo%20get_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%20echo%20get_permalink($post->ID);?>"><?php echo $thumb;?></a></div></div>



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

最佳解決方案

嗨 @Robin I. 騎士:

我將 get_the_excerpt()視為傳統設計的功能。隨著 WordPress 使用的增長,有很多更新的 use-cases,它不適合,但更新的功能,以獲得不同的資料。一個例子是現在頻繁使用 $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()返回的陣列,您可以像這樣模仿迴圈:

$stories = get_posts();

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();

第三種解決方案

自 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 混淆,這顯然只能在迴圈中起作用,因為它在內部呼叫了 the_content() 。

第四種方案

只是為了補充 MikeSchinkel 的答案,由於某種原因,這對我來說是不行的。我必須新增 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 。

乾杯

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。