Foreach没有正确迭代/使用WordPress

时间:2016-10-29 15:53:14

标签: php html wordpress if-statement foreach

我正在尝试迭代最近的三篇帖子,并显示他们的缩略图,标题和永久链接。

第一个具有略微不同的外观,因此有一个if语句也可以在不同的设置中显示第一个,然后迭代其余部分。发生了什么,它显示了第一个帖子三次与if和else的样式。

我不确定我做错了什么,谢谢你的帮助!

<?php
      $recent =  wp_get_recent_posts( array('numberposts' => 3) );
        $i = 0;
        global $recent_post;
        foreach( $recent as $recent_post ) {
          if ($i == 0 ): ?>
              <div class="header_recent main">
                <a href="<?php the_permalink($recent_post); ?>">
                  <img src="<?php echo get_the_post_thumbnail($recent_post->ID); ?>"/>
                  <div class="overlay">
                    <h1><?php the_title_attribute($recent_post); ?></h1>
                  </div>
                </a>
              </div>
      <?php else: ?>
          <div class="header_recent side">
            <a href="<?php the_permalink($recent_post); ?>" title="<?php the_title_attribute($recent_post); ?>">
            <img src="<?php echo get_the_post_thumbnail($recent_post->ID); ?>"/>
                <div class="overlay">
                  <h1><?php the_title_attribute($recent_post); ?></h1>
                </div>
          </div>
    <?php endif; $i++; }
  wp_reset_postdata();
?>

此外,我非常感谢有关get_the_post_thumbnail功能的警告的帮助:

  

注意:尝试在线获取非对象的属性    29

1 个答案:

答案 0 :(得分:1)

默认情况下,函数wp_get_recent_posts()会返回ARRAY,您可以在documentation中看到。在您的情况下,您需要将第二个参数$output作为OBJECT传递:

$recent =  wp_get_recent_posts( array( 'numberposts' => 3 ), OBJECT );

此外,您不应将$recent_post作为the_title_attribute()函数的参数传递。所以而不是:

<h1><?php the_title_attribute($recent_post); ?></h1>

你可以写:

<h1><?php echo $recent_post->post_title; ?></h1>

并且您不需要将$recent_post声明为global