How to return loop contents

时间:2012-06-30 作者:mrwweb

有时,我需要return 循环的输出(通常带有WP_Query 如本例所示)用于短代码或启用筛选器the_content.

下面使用对象缓冲的代码可以工作,但我在其他地方读到过缓冲可能效率低下。我也看到过HEREDOC,但我不知道这在这里是如何工作的,除非我先将每个模板标记保存为变量(这似乎再次低效)。

所以我的问题是,返回循环输出的最佳方法是什么?

<?php if ( $cms_pl_pages->have_posts() ) :
ob_start(); // start object buffering. we\'ll run the loop and spit out final contents.
echo \'<section class="cms-pl-gallery">\';
while ( $cms_pl_pages->have_posts() ) : $cms_pl_pages->the_post();
?>
    <article class="cms-pl-item clearfix">
        <?php has_post_thumbnail() ? the_post_thumbnail() : null; ?>
        <a href="<?php the_permalink(); ?>" title="Read \'<?php the_title(); ?>.\'">
            <h2><?php the_title(); ?></h2>
        </a>
        <?php has_excerpt() ? the_excerpt() : null; ?>
    </article>

<?php endwhile;
echo \'</section> <!-- end .cms-pl-gallery -->\';
$content = ob_get_contents(); // set $content to buffered object
ob_end_clean(); // throw away the buffered object
endif; wp_reset_postdata();
return $content; // return! ?>

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

有一些替换为所有部分返回纯字符串,无需将任何内容打印到输出缓冲区中。我喜欢sprintf() 你可以这样写例子:

<?php
if ( $cms_pl_pages->have_posts() )
{
    $content = \'<section class="cms-pl-gallery">\';
    while ( $cms_pl_pages->have_posts() )
    {
        $cms_pl_pages->the_post();
        $content .= sprintf(
            \'<article class="cms-pl-item clearfix">
                %1$s
                <h2>
                    <a href="%2$s" title="Read %3$s">%4$s</a>
                </h2>
                %5$s
            </article>\',
            get_the_post_thumbnail(),
            apply_filters( \'the_permalink\', get_permalink() ),
            the_title_attribute( array( \'echo\' => FALSE ) ),
            the_title( \'\', \'\', FALSE ),
            has_excerpt() ? apply_filters( \'the_excerpt\', get_the_excerpt() ) : \'\'
        );
    }
    $content .= \'</section> <!-- end .cms-pl-gallery -->\';
}
wp_reset_postdata();
return $content;

结束

相关推荐

如何用显式样式版本替换GET_TEMPLATE_PART(‘loop’,‘tag’)?

所以我的主题有一个标签。php,其中包含以下行:get_template_part(\'loop\',\'tag\');它运行循环并输出标记条目。我正在修改它以包含帖子缩略图(使用if(has\\u post\\u thumbnail()){the\\u post\\u thumbnail()}),但需要添加更多样式。为此,我需要访问get_template_part() 正在吐。我知道我应该能够通过创建自己的循环中循环标记来实现这一点。php或类似的东西,但找不到示例。有人能给我一个简单的循环标记示例吗