問題描述
為什麼人們不能像標題和大多數其他元素一樣獲得 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。