循环帖子摘录返回空白

时间:2018-08-01 15:24:01

标签: php wordpress

我以这种方式显示我的帖子列表:

[-- IMAGE --]
[-- Title --]
[-- Excerpt --]
[-- "Read more" --]

index.php文件中使用代码时,我的代码运行良好,例如:

while(have_posts())
{
    the_post();

    $link = get_permalink();
    $title = the_title();
    $excerpt = the_excerpt();
}

然后在functions.php中,将一个过滤器应用于摘要:

add_filter('excerpt_length', 'custom_excerpt_length');
add_filter('excerpt_more', 'new_excerpt_more');

function custom_excerpt_length() 
{
    return 14;
}

function new_excerpt_more($more) 
{
    global $post;

    return '... <a href="'. get_permalink($post->ID) . '">Read more</a>';
}

但是,现在我必须遍历functions.php内的帖子,并且已经找到了标题和链接,但没有摘录。

$posts  = get_posts($args);

foreach($posts as $post)
{
    $link = get_permalink($post);
    $title = get_the_title($post);
    $excerpt = get_the_excerpt($post); // Returns empty and I'd like to apply the filters   
}

如何将过滤器应用于函数get_the_excerpt,为什么它为空?

1 个答案:

答案 0 :(得分:0)

来自the documentation

  

如果此功能在The Loop之外使用,且帖子没有   自定义摘录,此函数将使用wp_trim_excerpt()生成   摘录。该函数使用get_the_content(),必须使用   使用The Loop,如果正在使用get_the_excerpt(),则会导致问题   在The Loop外使用。为了避免出现问题,请使用   setup_postdata(),然后再调用get_the_excerpt()来设置   全局的$ post对象。

这应该有效:

$posts  = get_posts($args);

foreach($posts as $post)
{
    setup_postdata($post);

    $link = get_permalink($post);
    $title = get_the_title($post);
    $excerpt = get_the_excerpt($post);
}

wp_reset_postdata();