为什么Apply_Filters在循环内部和外部的行为不同?

时间:2013-01-12 作者:rumpled

What I want: 通过创建$query = new WP_Query($args);

Why: 以json格式返回特定内容,作为一种API请求,准备在另一个站点上显示

<小时>What I tried first:

foreach($query->posts as $post) {
    $post->post_content = apply_filters(\'the_content\', $post->post_content);
};
这执行了autopdo_shortcode 正确过滤,但没有oembed 转型

<小时>What I ended up doing:

while($query->have_posts()) : $query->the_post();
    $query->posts[$query->current_post]->post_content = apply_filters(\'the_content\', get_the_content());
endwhile;
输出的唯一区别在于,它在循环内部执行oembed,而在循环外部不执行oembed。这种差异是从哪里来的?有没有更好的方法可以做到这一点?

我检查过了global $wp_filtersoembed 绝对列在下面[8], 所以这不是一个过滤器加载问题。

1 个回复
最合适的回答,由SO网友:Mateusz Hajdziony 整理而成

因为您没有使用the_post 第一个示例中的函数。这个函数的作用是调用setup_postdata 函数,它设置其他函数工作所需的所有全局变量。您可以手动调用它,只需在foreach 循环,如下所示:setup_postdata( $post ). 此外,您可能还需要致电global $post; 在您的foreach

结束

相关推荐

Loop within a loop?

我在我的页面上使用了几个自定义的wp\\u查询循环,第一个循环从某个类别检索新闻,然后用permalink显示其中的一个小摘录。第二个是另一个wp\\u查询,它获取带有几个高级自定义字段的自定义帖子类型。问题是,我想在第二个循环中使用另一个循环,从新闻部分获取3篇文章,并带有缩略图(基本上与第一个循环相反,它将获取所有其他类别)。在阅读了无数关于循环的文章后,我不知道如何在第二个循环中创建“嵌套”循环。我相信这必须很简单,看起来很容易做到。下面是我的代码,其中去掉了很多html。<?php