我制作了一个简单的自定义元框插件来显示推荐。我使用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。如何在两个页面上使用它?
答案 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>