在使用ACF图库的短码中遇到Foreach问题

时间:2016-01-21 作者:Aibrean

通常我只会将这种类型的内容放在模板中,但我提取内容的方式有点不同。我做了一个我一直有问题的短代码。它使用Foundation 5的“动态观察”滑块和ACF库。它挂在foreach 部分

// Add Shortcode
function custom_carousel($atts, $content = null) {
    extract(
      shortcode_atts(
        array(), $atts));
    $out1 = \'<ul class="orbit" data-orbit data-options="timer_speed:1500;">\';
    $carouselimages = get_field(\'gallery\');
    foreach ($carouselimages as $carouselimage) {
        $output = \' <li class="text-center"> <img src="\' . $carouselimage[\'url\'] . \'" title="\' . $carouselimage[\'title\'] . \'" alt="\' . $carouselimage[\'alt\'] . \'" /></li>\';
    }
    $out3 = \'</ul>\';
    return $out1 . $output . $out3;
}

add_shortcode(\'custom-carousel\', \'custom_carousel\');
我在模板中为该网站的移动版本使用此代码,该代码运行良好:

<?php
$carouselimages = get_field(\'gallery\');
if ($carouselimages) {
    ?>
            <ul class="orbit" data-orbit data-options="timer_speed:1500;">
                <?php foreach ($carouselimages as $carouselimage) { ?>
                    <li class="text-center">
                        <img src="<?php echo $carouselimage[\'url\']; ?>" title="<?php echo $carouselimage[\'title\']; ?>" alt="<?php echo $carouselimage[\'alt\']; ?>" />
                        <?php echo $carouselimage[\'description\']; ?>
                    </li>
                <?php }; ?>
            </ul>
<?php } ?>

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

首先-不要使用extract. 这是一种非常糟糕的代码风格,而且在内核中也很差。

每次运行foreach循环时,都会重写$output 因为您为该变量分配了新内容。您想要的是将新列表项与现有列表项连接起来。这可以使用concatening赋值运算符完成:

$output .= \'<li class="text-center"> <img src="\' . $carouselimage[\'url\'] . \'" title="\' . $carouselimage[\'title\'] . \'" alt="\' . $carouselimage[\'alt\'] . \'" /></li>\';
$output 变量应在foreach 陈述只需为其分配一个空字符串。

相关推荐

Execute shortcodes in PHP

我在帖子编辑器中添加了一个地理位置快捷码,可以根据用户的位置显示不同的信息,将其放在帖子页面的内容中,效果非常好。如何在主题的PHP文件中执行此短代码[地理位置][地理位置]?我正在使用免费修改Wordpress主题,我想添加一个新的<span>[geolocation][/geolocation]Information text content</span> 但在主题的内部。php文件,我如何才能做到这一点?如果我直接加上<span>[geolocation][/ge