在Foreach循环中有条件地输出两次内容

时间:2016-07-11 作者:SPS

我有一个使用自定义字段和Slick 旋转木马,使用下面的代码。

    <?php $entries =  get_post_meta( get_the_ID(), \'_mysite_homepage_slider_group\', true );

    foreach ( (array) $entries as $key => $entry ) {

            $img = $title = $url = $desc = \'\';

            if ( isset( $entry[\'_mysite_homepage_slider_title\'] ) )
                $title = esc_html( $entry[\'_mysite_homepage_slider_title\'] );

            if ( isset( $entry[\'_mysite_homepage_slider_caption\'] ) )
                $desc = wpautop( $entry[\'_mysite_homepage_slider_caption\'] );

            if ( isset( $entry[\'_mysite_homepage_slider_url\'] ) )
                $url = esc_html( $entry[\'_mysite_homepage_slider_url\'] );

            if ( isset( $entry[\'_mysite_homepage_slider_image_id\'] ) ) {
                $img = wp_get_attachment_image_url( $entry[\'_mysite_homepage_slider_image_id\'], \'full\');
            }

        } ?>
我希望用户能够通过单击后端的复选框来禁用单个幻灯片。

很简单吧?

因此,我添加了一个复选框,并编写了此代码以插入到我的代码片段中。它检查是否单击了复选框。我试着把它放在foreach 线条,如下所示:

    foreach ( (array) $entries as $key => $entry ) {

        // Display slides if checkbox is NOT clicked (e.g., is empty)
        if ( empty( $entry[\'_mysite_homepage_slider_checkbox\'] ) ) {

           $img = $title = $url = $desc = \'\';

     (...)
     }
这是可行的-幻灯片没有显示在页面上-但仍有一些东西通过。正在创建重复幻灯片。

例如,后端有4个幻灯片。第四个复选框已选中。在前端,幻灯片#3显示两次。代码似乎正在输出以下内容:

第1张幻灯片第2张幻灯片第3张幻灯片(再次!)

EDIT: Final code snippet with answer, 对于将来可能会发现这一点有用的任何人。

2 个回复
最合适的回答,由SO网友:Tim Malone 整理而成

您的问题中缺少一些代码—您的幻灯片实际输出的代码。

这个foreach 您发布的循环只设置变量,实际输出发生在循环下方。

所以,在第四张幻灯片中,您所做的就是避免设置变量。。。因此,幻灯片仍然是输出的,但使用第三张幻灯片的变量。

你的if 复选框逻辑看起来正常;您只需要在输出幻灯片的实际代码中包含逻辑。

SO网友:slashbob

所有输出html的if语句实际上都在if语句的复选框中吗?从你发布代码的方式看不出来。看起来可能是在最后一次通过foreach循环时,变量的值被记住,并再次输出??