使用While循环缩短PHP代码

时间:2015-05-10 18:31:30

标签: php wordpress while-loop

我正在尝试简化下面的代码,但我仍然在努力理解它。代码A工作正常,它输出图像列表,但代码B只显示单个图像

代码A

<?php
$html_form = '<label>
    <img src="%1$s" width="%2$s" height="%3$s" alt="%4$s" />
    <input type="checkbox" name="%5$s[]" value="%6$s" %7$s/>
</label>';

$html_td = '';
$html = '';

while ($query->have_posts()) {
    $query->the_post();
    $id = get_the_ID();
    $select = '';
    $thumb = wp_get_attachment_image_src($id, array(30, 30));

    if (is_array($instance['thumbs']) && in_array($id, $instance['thumbs'])) {
        $select = 'checked="checked"';
    }
    $html .= sprintf($html_td);
    $html_td = '';
    $html_td .= sprintf($html_form, $thumb[0], $thumb[1], $thumb[2], get_the_title(), $this->get_field_name('thumbs'), $id, $select);
}
$html_form = '          
<p>
    %s
</p>';
printf($html_form, $html);
?>

我的尝试: 代码B

<?php
while ($query->have_posts()) {
    $query->the_post();
    $id = get_the_ID();

    $thumb = wp_get_attachment_image_src($id, array(30, 30));

    $thumbs = is_array($instance['thumbs']) ? (bool) in_array($id, $instance['thumbs']) : true;
}
?>

<p>
    <label>

        <img src="<?php echo $thumb[0] ?>" width="<?php echo $thumb[1] ?>" height="<?php echo $thumb[2] ?>" alt="<?php echo get_the_title() ?>" />
        <input class="checkbox" type="checkbox" name="<?php echo $this->get_field_name('thumbs'); ?>" value="<?php echo $id ?>" <?php checked($thumbs); ?>/>
    </label>
</p>

1 个答案:

答案 0 :(得分:0)

正如评论中提到的那样,因为你只回显了一张图片。

你可以这样做:

<?php while($query->have_posts()):
      $query->the_post();
      $id = get_the_id();
      $thumb = wp_get_attachment_image_src($id, array(30, 30));

      $thumbs = is_array($instance['thumbs']) ? (bool) in_array($id, $instance['thumbs']) : true;?>
<p>
    <label>

        <img src="<?php echo $thumb[0] ?>" width="<?php echo $thumb[1] ?>" height="<?php echo $thumb[2] ?>" alt="<?php echo get_the_title() ?>" />
        <input class="checkbox" type="checkbox" name="<?php echo $this->get_field_name('thumbs'); ?>" value="<?php echo $id ?>" <?php checked($thumbs); ?>/>
    </label>
</p>
<?php endwhile;
wp_reset_postdata();

在这种情况下,HTML在while内部,并且图像将在每次迭代时回显。另外,请确保您拥有wp_reset_postdata(),否则您将来可能(或可能不会)遇到错误。