我的自定义get_the_excerpt()无法通过ID

时间:2017-02-22 20:40:19

标签: php wordpress function

在我的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)."&#8230";
    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)."&#8230";
    echo $excerpt;
}

仍然没有变化。

2 个答案:

答案 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,'&lt;!&#8211;more&#8211;&gt;')>0){
    return substr($content,0,strpos($content,'&lt;!&#8211;more&#8211;&gt;'));
}else{
    if($num===0){
        return substr($content,0,strpos($content,'.')+1);
    }else{
        return substr($content,0,$num).((strlen($content)>$num)?"...":"");
    }
}
}