For Each循环不会追加到_Content挂接

时间:2019-06-05 作者:scottie5689

我正在使用过滤器将项目仅附加到一个页面上的内容。除了$整变量的排序之外,它完全可以工作。标题显示在内容之后,但无论顺序如何,for-each循环都显示在内容的上方或前面。我想我使用one($arr)正确地通过了循环,但我仍在学习php。我通常会在页面模板中包含这种类型的循环,但我正在尝试使用插件添加它。

function insertLoop($content) {

  if( is_page( \'regular-page\' ) ) {

  function one( $arr ) {  

    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();

   }

   $words = "<h2>Custom Post Full List</h2>";

   $whole = $content . $title . one($arr);

   return $whole;

  }

}

add_filter (\'the_content\', \'insertLoop\');

1 个回复
SO网友:Krzysiek Dróżdż

筛选器应修改给定值并返回它。它不应该打印任何内容。

但您的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();
}
另一个稍微干净一点的方法是以这样的方式修改此函数,从而构造字符串。

相关推荐

如何对照PHP变量检查表单输入?

我从WordPress元数组中提取了一个变量-$vCode.此变量是一个5位数。在页面前端,我有一个HTML表单,请求输入代码和一个提交按钮。提交后,我希望检查输入的代码$vCode 如果匹配或不匹配,则显示“success”或“fail”。我应该在这里使用HTML表单还是PHP</在不离开页面的情况下运行检查的最佳方式是什么</到目前为止,我掌握的是:$vCode = 11111; $message = \"\"; if(!isset($_POST[\'submitbutto