例如。 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;?>
#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 );
}
评论
内容的“某些”到底是什么?wordpress中的摘录功能返回帖子的摘录。如果帖子没有摘录,它将返回内容的一定数量的字符,后跟“ ...”或“阅读更多”或模板提供的任何内容
不是成为PITA,而是社区规则禁止签名和标准关闭。为了遵守规则并避免在编辑所有问题后让Jeff Atwood向您发送严厉的消息,请停止使用“ Marvellous”作为结尾。 (也请不要射击信使)