在我的single.php页面上,我正在尝试创建一个函数,通过ID为我提供特定帖子的自定义长度摘录。
以下是我正在运行的两个功能。
/* Custom get_the_excerpt to allow getting Post excerpt by ID */
function custom_get_the_excerpt($post_id) {
global $post;
$save_post = $post;
$post = get_post($post_id);
$output = get_the_excerpt($post);
$post = $save_post;
return $output;
}
/* Change Excerpt length */
function excerpt($num, $post_id = '') {
$limit = $num+1;
$excerpt = explode(' ', custom_get_the_excerpt($post_id), $limit);
array_pop($excerpt);
$excerpt = implode(" ",$excerpt)."…";
echo $excerpt;
}
我用它来调用该函数。
<?php $previous = get_previous_post();
echo excerpt('30', $previous -> ID); ?>
我遇到的问题是$ post给了我之前的帖子信息但是当我把它传递给get_the_excerpt时它会返回当前的帖子摘录而不是之前的帖子摘录。
修改
在几个人告诉我我可以将$ post_id传递给get_the_excerpt()
后,将功能更改为此/* Change Excerpt length */
function excerpt($num, $post_id = '') {
$limit = $num+1;
$excerpt = explode(' ', get_the_excerpt($post_id), $limit);
array_pop($excerpt);
$excerpt = implode(" ",$excerpt)."…";
echo $excerpt;
}
仍然没有变化。
答案 0 :(得分:2)
添加setup_postdata($ post);解决了我的问题。
function custom_get_the_excerpt($post_id) {
global $post;
$save_post = $post;
$post = get_post($post_id);
setup_postdata($post);
$output = get_the_excerpt($post);
wp_reset_postdata();
$post = $save_post;
return $output;
}
答案 1 :(得分:0)
以下函数获得两个参数: - $ num:您要显示的字符数 - $ post_id:您要获取内容的帖子的ID
和: - 如果内容中有标记,则将文本返回给它 - 如果$ num = 0,则返回内容直到第一个完全停止 否则返回$ num在字符串
末尾添加“...”时指定的字符数function my_custom_excerpt($num = 0,$post_id=''){
$post=get_post($post_id);
$content=$post->post_content;
if(strpos($content,'<!–more–>')>0){
return substr($content,0,strpos($content,'<!–more–>'));
}else{
if($num===0){
return substr($content,0,strpos($content,'.')+1);
}else{
return substr($content,0,$num).((strlen($content)>$num)?"...":"");
}
}
}