为什么不能像标题和大多数其他元素那样通过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 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;?>


评论

内容的“某些”到底是什么?

wordpress中的摘录功能返回帖子的摘录。如果帖子没有摘录,它将返回内容的一定数量的字符,后跟“ ...”或“阅读更多”或模板提供的任何内容

不是成为PITA,而是社区规则禁止签名和标准关闭。为了遵守规则并避免在编辑所有问题后让Jeff Atwood向您发送严厉的消息,请停止使用“ Marvellous”作为结尾。 (也请不要射击信使)

#1 楼

@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;
}


我还没有测试过,但可以肯定的是我做对了。如果这不能满足您的需求,请详细说明,也许我可以提出其他建议。

评论


有用。有点。非常奇怪的结果。它肯定在执行其功能,但结果很奇怪。我将其与GET_Posts结合使用,由于某些原因,前2个get帖子始终相同。这是一个链接,您将明白我的意思。查看右侧的4个帖子。 divethegap.com/update/community/feedback/2010/06/steve-riches

–罗宾一世骑士
2011年3月19日19:48在

@Robin I Knight:请发布您的循环源代码以更新您的问题;不看代码就很难调试代码。也可能是导致问题的插件;尝试一次禁用一个。

– MikeSchinkel
2011年3月19日在20:19



上面有问题的循环源代码^^

–罗宾一世骑士
2011年3月19日在20:28

顺便说一句,我将函数名称更改为get_the_excerpt_id($ post_id)

–罗宾一世骑士
2011-03-20 15:11

@Robin I Knight-我在循环中看不到任何东西,但是您可以尝试在循环开始时调用setup_postdata($ post),就像@Rarst所建议的那样。如果那不起作用,可能是您需要禁用的插件;你有尝试过吗?而且您可能不想将其称为get_the_excerpt_id(),因为WordPress将来可能会添加该功能并破坏您的网站。通过使用foreach($ stories as $ story),您可能会在循环中不使用该函数:global $ post; $ post = $ story;代替。

– MikeSchinkel
2011-03-20 19:54

#2 楼

摘录的技巧极为混乱。这不是您问题的精确答案,但通常来说,如果您需要制作特定于Loop的模板标签,并使用get_posts()返回的数组,您可以像这样模拟Loop:

$stories = get_posts(); 

foreach ($stories as $post) {

    setup_postdata($post);

    // stuff
}
wp_reset_postdata();


评论


那么wp_reset_query()呢? ?

– cwd
2012年1月27日在16:39

如果仅使用setup_postdata()全局查询,则@cwd不受影响,并且仅需要重置发布数据。

–稀有
2012年1月27日18:47

与将帖子存储在另一个var中并重新查询另一个帖子以使其全局化相比,此解决方案比分配器更干净。 +1

–巴里·库伊(Barry Kooij)
13年4月10日在16:02



谢谢@Rarst帮助了我。添加setup_postdata($ post);解决了我的问题

–西蒙
2014年11月14日20:55



#3 楼

从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混淆,wp_trim_excerpt显然只在循环内起作用,因为它在内部调用the_content()。

#4 楼

只是增加了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 。

干杯

评论


我尝试了MikeSchinkel的答案,但它对我没有用。设置发布数据可以解决问题。在我没有'setup_postdata'的情况下,该函数返回了父帖子的title +摘录。

– Turzifer
16-09-25在9:49

#5 楼



$post = get_post( $id );

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


对我来说似乎很直截了当,但是我想知道我是否缺少某些东西。 >

#6 楼

如果所有帖子都带有<!--more-->标记,则可以在上面的代码中使用以下内容:

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


当然,如果您有任何帖子没有<!--more-->标签,它们将完整显示。在我的情况下有效,但并非对所有人都有效...

#7 楼

我认为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_postdata行才能使其正常工作。

评论


这是否需要wp_reset_post_data()在循环内工作?

–克里斯·平克(Chris Pink)
17年7月10日在9:26



显然(绕过这栋特殊房子之后)现在已成为核心部分。

–克里斯·平克(Chris Pink)
17年7月10日在9:29

#8 楼

我使用wp_trim_words经常使用这两种语言。我不断发现自己需要缩写,并且在循环之外阅读了更多功能。其他人可能会发现这很有用。因此,这就是我要使用的方法:


通过POST ID获取摘录
获取帖子内容如果未设置摘录,请设置
Word的长度摘录
选择内容以获取更多信息(链接/文本)

我将此行直接插入到我正在编辑的自定义模板中。

    //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,并且想避免再次调用数据库。您可以始终使用get_the_permalink。

请参阅Wordpress文档中的wp_trim_words。

#9 楼

这对我有用:

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


#10 楼

从WP 4.5.0起,可以使用帖子ID作为参数
get_the_excerpt( $post->ID )

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

#11 楼

令人讨厌的是,它实际上相当简单
function cameronjonesweb_get_excerpt_by_id( $post_id ) {
    return apply_filters( 'get_the_excerpt', wp_trim_excerpt( '', $post_id ), $post_id );
}