Foreach循环适用于font-page.php但不适用于page.php?

时间:2017-03-21 17:08:28

标签: php wordpress foreach

我制作了一个简单的自定义元框插件来显示推荐。我使用foreach循环来检索和显示front-page.php页面上的数据。但是,在我的page.php页面上使用完全相同的代码会返回

  

警告:为foreach()提供的参数无效。

出现此错误的原因是什么?如何解决?

以下是front-page.php和page.php上使用的代码:

     <div id="testimonials">
            <?php 
            $testimonials = get_post_meta($post->ID, "testimonials_data", true);
            $counter = 0;
            foreach($testimonials as $testimonial){
            $counter++;
            ?>
            <div class="testimonial <?php if($counter == 1){echo 'active-testimonial';}; ?>">
                <p><?php echo $testimonial['field1']; ?></p>
                <span><?php if(!empty($testimonial['field2'])){echo $testimonial['field2'];}; if(!empty($testimonial['field3'])){echo ' - ' . $testimonial['field3'];}; ?></span>
            </div>
            <?php }; ?>
        </div>

编辑: 更清楚。我的问题不在于foreach循环根本不起作用。它适用于front-page.php,但不适用于使用相同代码的page.php。如何在两个页面上使用它?

2 个答案:

答案 0 :(得分:0)

您的get_post_meta()$ single属性设置为true。尝试将其设置为false,以便它始终返回一个数组。

$testimonials = get_post_meta($post->ID, "testimonials_data", false);

答案 1 :(得分:0)

get_post_meta( int $post_id, string $key = '', bool $single = false )

此函数返回(混合)值   - 如果$ single为false,它将是一个数组。   - 如果$ single为真,它将是元数据字段的值。

所以如果你在字符串testimonials_data中存储了值,除了json_encoded。 那么它只会显示数组中的值。

并申请一些!空检查

 <div id="testimonials">
        <?php 
        $testimonials = get_post_meta($post->ID, "testimonials_data", true);
        $counter = 0;
        if(!empty($testimonials)){
            foreach($testimonials as $testimonial){
            $counter++;
        ?>
        <div class="testimonial <?php if($counter == 1){echo 'active-testimonial';}; ?>">
            <p><?php echo $testimonial['field1']; ?></p>
            <span><?php if(!empty($testimonial['field2'])){echo $testimonial['field2'];}; if(!empty($testimonial['field3'])){echo ' - ' . $testimonial['field3'];}; ?></span>
        </div>
        <?php }; 
        }?>
</div>