我的自定义get_the_excerpt()无法按ID进行摘录

时间:2017-02-22 作者:Landon Call

我的单曲。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\\u The\\u摘录时,它会返回当前的帖子摘录,而不是以前的帖子摘录。

编辑

在几个人告诉我可以传递$post\\u id来获取\\u摘录()后,将函数更改为此

  /* 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 个回复
最合适的回答,由SO网友:MaximOrlovsky 整理而成

试试这个

/* Change Excerpt length */
function excerpt($num, $post_id) { // removed empty default value
    $limit = $num+1;
    $excerpt = apply_filters(\'the_excerpt\', get_post_field(\'post_excerpt\', $post_id));
    $excerpt = explode(\' \', $excerpt, $limit);
    array_pop($excerpt);
    $excerpt = implode(" ",$excerpt)."&#8230";
    echo $excerpt;
}
另一种解决方案-使用setup_postdata($post);wp_reset_postdata();

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

SO网友:Fayaz

您不需要使用自定义代码来更改摘录长度。有一个默认的WordPress过滤器:excerpt_length. 你只需要使用它。

要在主题的每个地方更改为相同的摘录长度,如果您在站点的每个地方都使用相同的摘录长度,只需在主题的functions.php 文件:

function my_custom_excerpt_length( $length ) {
    // set the number you want
    return 20;
}
add_filter( \'excerpt_length\', \'my_custom_excerpt_length\', 999 );
然后在模板文件中(例如single.php), 只需拨打:

echo get_the_excerpt( $post_id );
在主题上使用不同的摘录长度如果您想在不同的地方使用不同的摘录长度,那么创建一个自定义函数以便轻松调用是有意义的。即使这样,您也可以使用WordPress提供的函数和过滤器。在这种情况下,请在中使用以下功能functions.php 文件:

function set_custom_excerpt_length( $length ) {
    global $custom_excerpt_length;
    if( ! isset( $custom_excerpt_length ) ) {
        return $length;
    }
    return $custom_excerpt_length;
}

function my_excerpt( $post_id = null, $length = 55 ) {
    global $custom_excerpt_length, $post;
    $custom_excerpt_length = $length;
    if( is_null( $post_id ) ) {
        $post_id = $post->ID;
    }
    add_filter( \'excerpt_length\', \'set_custom_excerpt_length\', 999 );
    echo get_the_excerpt( $post_id );
    remove_filter( \'excerpt_length\', \'set_custom_excerpt_length\', 999 );
}
然后在模板文件中这样使用它:

my_excerpt( $previous->ID, 30 );
当然,您可以使用其他答案使用的自定义函数,但是,在这种情况下,您将错过WordPress的默认行为。

Note: 如果您正在使用the loop 当然,你不应该打电话wp_reset_postdata() 在每次摘录函数调用时。

相关推荐

无法在模板函数.php中使用IS_HOME

我试图在标题中加载一个滑块,但只在主页上加载。如果有帮助的话,我正在使用Ultralight模板。我正在尝试(在template functions.php中)执行以下操作:<?php if ( is_page( \'home\' ) ) : ?> dynamic_sidebar( \'Homepage Widget\' ); <?php endif; ?> 但这行不通。现在,通过快速的google,我似乎需要将请