GET the excerpt by ID

时间:2011-03-19 作者:Robin I Knight

为什么一个人不能像ID一样获得标题和大多数其他元素的摘录。

例如,获取\\u摘录(ID)。我知道如何将其与$post->post\\u extract函数一起使用,但如果没有输入摘录,则不会返回部分内容,simple不会返回任何内容。

所以我要做的是,如果有摘录,就通过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 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;?>

11 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

你好@Robin I. Knight:

我查看get_the_excerpt() 作为传统设计的一个功能。随着WordPress使用量的增长,有许多新的用例不适合它,但用于获取不同数据的新函数却适合它。例如,现在频繁使用$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;
}
我还没有测试过,但我很确定我做对了。如果这不能满足您的需要,请详细说明,也许我可以提出其他建议。

SO网友:Rarst

摘录的机制非常混乱。这并不是对您的问题的精确答案,但一般来说,如果您需要制作特定于循环的模板标记,请使用返回的数组get_posts() 您可以这样模拟循环:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();

SO网友:lkraav

自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 这显然只在循环中起作用,因为它在内部调用了\\u content()。

SO网友:danbrown

只是补充一下MikeSchinkel的答案,因为某种原因,这对我来说并不适用。我必须添加setup\\u 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\\u postdata。

干杯

SO网友:Dominic P

基于@Maxime的答案,这是否可行?

$post = get_post( $id );

$excerpt = ( $post->post_excerpt ) ? $post->post_excerpt : $post->post_content;
这对我来说似乎已经够直截了当了,但我想知道我是否遗漏了什么。

SO网友:Stephen Cronin

如果ALL 您的帖子有<!--more--> 标记,然后您可以将以下内容用于上面的代码:

$sjc_excerpt = explode( \'<!--more-->\', $post->post_content); 
echo wpautop( $sjc_excerpt[0] );
当然,如果你有任何帖子没有<!--more--> 标签,它们将整体显示。在我的情况下有效,但不是所有的。。。

SO网友:Jude Okoroafor

我查看get_the_excerpt() 作为传统设计的一个功能。随着WordPress使用量的增长,有许多新的用例不适合它,但用于获取不同数据的新函数却适合它。例如,现在频繁使用$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;
}
只是补充一下MikeSchinkel的答案,因为某种原因,这对我来说并不适用。我必须添加setup\\u postdata行才能正常工作。

SO网友:Brev Tiw

这是一个小的两层衬里,我经常使用wp_trim_words. 我不断发现自己需要缩写,并在循环之外阅读更多功能。其他人可能会觉得这很有用。这就是我用来:

通过帖子ID获取摘录如果没有设置摘录,则获取帖子内容,设置摘录的字长,为阅读更多内容选择内容(链接/文本)我直接将其内联到正在编辑的自定义模板中。

    //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。摘录内容按帖子ID获取摘录,但如果未设置摘录,则获取帖子内容。

我正在使用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->guid 获取URL,因为我不需要友好的URL,并且希望避免再次调用DB。您可以随时使用get\\u the\\u permalink。

看见wp_trim_words 在Wordpress文档中。

SO网友:Rijo

这对我很有用:

$excerpt = apply_filters(\'the_excerpt\', get_post_field(\'post_excerpt\', $post_ide));

SO网友:Jorge Cordero

根据WP 4.5.0,可以使用post ID作为参数get_the_excerpt( $post->ID )

资料来源:https://developer.wordpress.org/reference/functions/get_the_excerpt/

SO网友:cameronjonesweb

虽然这很烦人,但实际上很简单

function cameronjonesweb_get_excerpt_by_id( $post_id ) {
    return apply_filters( \'get_the_excerpt\', wp_trim_excerpt( \'\', $post_id ), $post_id );
}

结束

相关推荐

Posts wont expire

我在安排帖子自动过期(要么删除,要么起草)方面遇到了一些麻烦,我尝试过的每个插件都没有做任何事情,当它达到预定时间时,什么都没有发生,这让我觉得这可能是我一直忽视的一件简单的事情。。我想我可能对wp-cron有问题,但我似乎在通过wordPress设置未来的发布日期方面没有任何问题。我运行了最新版本的Wordpress,并设置了多个站点。所有插件都是目前可用的最新版本。有人有什么想法吗??我没有东西可以尝试了。。。提前感谢塔夫芝