筛选器应修改给定值并返回它。它不应该打印任何内容。
但您的foreach循环的作用正好相反——它打印输出,不向结果追加任何内容。因此,当您使用它将其结果附加到内容时,它会打印其结果,并且不会返回任何内容,因此不会附加任何内容。
解决此问题的一种方法是使用缓冲:
function one( $arr ) {
ob_start();
global $post;
$args = array(
\'post_type\' => \'custom-post-type\',
\'posts_per_page\' => -1,
);
$customposts = get_posts( $args );
foreach ( $customposts as $post ) : setup_postdata( $post ); ?>
<div class="custom-post-listing">
<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<p><?php the_date(); ?></p>
</div>
<?php endforeach; wp_reset_postdata();
return ob_get_clean();
}
另一个稍微干净一点的方法是以这样的方式修改此函数,从而构造字符串。