问题描述

为什么人们不能像标题和大多数其他元素一样获得 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。