【问题标题】:WordPress ACF Checkbox loopWordPress ACF 复选框循环
【发布时间】:2017-12-23 08:49:24
【问题描述】:

我目前的 CPT 为“餐厅”。 每个餐厅可以有多个“功能”,由用户在后端通过 ACF 复选框字段选择。

我希望能够遍历该字段并为每个选中的复选框应用一个类名。

在下面的示例中,餐厅勾选了 4 个可能字段中的 3 个。 但是,仅显示“停车”图标(4 次)- 可能是由于我的 if 语句。

理想情况下,我希望它循环遍历每个“if”,获取附加到 $feature_icon 的字符串,然后将其吐出到 span 下方的回声中。

我尝试将 if 语句的部分移动到“foreach”循环中,但无济于事。

任何建议表示赞赏,谢谢。

<?php if( $featured_restaurants ): ?>
<?php foreach ( $featured_restaurants as $featured_restaurant ): ?>

<div class="card__inputs"> <!-- Featured card specific icons start -->

<?php
    if(in_array('alcohol', $restaurant_features)):
        $feature_icon = "Alcohol";
    endif;

    if(in_array('family_friendly', $restaurant_features)):
        $feature_icon = "Family-Friendly";
    endif;

    if(in_array('open_late', $restaurant_features)):
        $feature_icon = "Open-Late";
    endif;

    if(in_array('parking', $restaurant_features)):
        $feature_icon = "Parking";
    endif;
?>

    <div class="details u-float-left"> <!-- Featured card specific icons container start -->
    <span class="icon icon--medium icon--Italian"></span>
    <?php if($restaurant_features): ?>
        <?php foreach($restaurant_features as $restaurant_feature): ?>
            <span class="icon icon--medium icon--<?php echo $feature_icon; ?>"></span>
        <?php endforeach; ?>
    <?php endif; ?>

    </div> <!-- Featured card specific icons container end -->

    </div> <!-- Featured card specific icons end -->

<?php endforeach; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>

【问题讨论】:

    标签: php arrays wordpress checkbox advanced-custom-fields


    【解决方案1】:

    使用数组。

    <?php if( $featured_restaurants ): ?>
    <?php foreach ( $featured_restaurants as $featured_restaurant ): ?>
    
    <div class="card__inputs"> <!-- Featured card specific icons start -->
    
    <?php
        if(in_array('alcohol', $restaurant_features)):
            $feature_icon['alcohol'] = "Alcohol";
        endif;
    
        if(in_array('family_friendly', $restaurant_features)):
            $feature_icon['family_friendly'] = "Family-Friendly";
        endif;
    
        if(in_array('open_late', $restaurant_features)):
            $feature_icon['open_late'] = "Open-Late";
        endif;
    
        if(in_array('parking', $restaurant_features)):
            $feature_icon['parking'] = "Parking";
        endif;
    ?>
    
        <div class="details u-float-left"> <!-- Featured card specific icons container start -->
        <span class="icon icon--medium icon--Italian"></span>
        <?php if($restaurant_features): ?>
            <?php foreach($restaurant_features as $restaurant_feature): ?>
                <span class="icon icon--medium icon--<?php echo $feature_icon[$restaurant_feature]; ?>"></span>
            <?php endforeach; ?>
        <?php endif; ?>
    
        </div> <!-- Featured card specific icons container end -->
    
        </div> <!-- Featured card specific icons end -->
    
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
    <?php endif; ?>
    

    或喜欢

    <?php if( $featured_restaurants ): ?>
    <?php foreach ( $featured_restaurants as $featured_restaurant ): ?>
    
    <div class="card__inputs"> <!-- Featured card specific icons start -->
        <?php
        $feature_icon = [
            'alcohol' => "Alcohol",
            'family_friendly' => "Family-Friendly",
            'open_late' => "Open-Late",
            'parking' => "Parking",
        ];
        ?>
        <div class="details u-float-left"> <!-- Featured card specific icons container start -->
        <span class="icon icon--medium icon--Italian"></span>
        <?php if($restaurant_features): ?>
            <?php foreach($restaurant_features as $restaurant_feature): ?>
                <span class="icon icon--medium icon--<?php echo $feature_icon[$restaurant_feature]; ?>"></span>
            <?php endforeach; ?>
        <?php endif; ?>
    
        </div> <!-- Featured card specific icons container end -->
    
        </div> <!-- Featured card specific icons end -->
    
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
    <?php endif; ?>
    

    或者去掉 if 语句并使用 str_replace()

    <?php if( $featured_restaurants ): ?>
    <?php foreach ( $featured_restaurants as $featured_restaurant ): ?>
    
    <div class="card__inputs"> <!-- Featured card specific icons start -->
        <div class="details u-float-left"> <!-- Featured card specific icons container start -->
        <span class="icon icon--medium icon--Italian"></span>
        <?php if($restaurant_features): ?>
            <?php foreach($restaurant_features as $restaurant_feature): ?>
            <?php $icon = str_replace(' ', '-', ucwords(str_replace('_', ' ', $restaurant_feature))); ?>
                <span class="icon icon--medium icon--<?php echo $icon ; ?>"></span>
            <?php endforeach; ?>
        <?php endif; ?>
    
        </div> <!-- Featured card specific icons container end -->
    
        </div> <!-- Featured card specific icons end -->
    
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
    <?php endif; ?>
    

    【讨论】:

    • 感谢劳伦斯,您的第一个建议非常有效。出于兴趣,为什么要从其他两个选项中删除 if 语句?
    猜你喜欢
    • 2020-08-30
    • 2013-08-05
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2017-11-14
    相关资源
    最近更新 更多