警告:在wordpress中为foreach()提供的参数无效

时间:2018-03-13 01:01:19

标签: php wordpress

以下是header.php上WordPress中的代码。使用此代码,我面临错误:

  

注意:尝试在线上获取../header.php中的非对象属性   156

     

警告:在./header.php中为foreach()提供的参数无效   第157行

     

注意:尝试在线上获取../header.php中的非对象属性   166

     

警告:在./header.php中为foreach()提供的参数无效   第167行

155   <?php
156     $pcCss = get_post_meta($post->ID , 'css_pc' ,false);
157     foreach($pcCss as $pcCss){
158       $pcCss = wp_get_attachment_url($pcCss);
159     }
160   ?>
161   <?php if (!empty($pcCss)): ?>
162     <link rel="stylesheet" href="<?php echo $pcCss; ?>">
163   <?php endif ?>
164
165   <?php
166     $spCss = get_post_meta($post->ID , 'css_sp' ,false);
167     foreach($spCss as $spCss){
168       $spCss = wp_get_attachment_url($spCss);
169     }
170   ?>

产生此警告的代码出了什么问题?

1 个答案:

答案 0 :(得分:3)

  

注意:尝试在线上获取../header.php中的非对象属性   156

您正在WordPress循环之外尝试$post并且它不是对象。因此,请尝试在第156行之前致电global $post;

请参阅文档:https://codex.wordpress.org/Class_Reference/WP_Post

.........

  

警告:在./header.php中为foreach()提供的参数无效   第157行警告:为foreach()提供的参数无效   第167行的../header.php

首先,您错误地声明了foreach语句,因此您的array_expression和value具有相同的值。它应该是:

foreach($spCss as $value){ //or $spCss_value, so anything but different than the array
 //code...
}

请参阅:http://php.net/manual/en/control-structures.foreach.php

同样,由于您的$post不是对象,它当前正为$spCss返回一个空值,您必须在运行foreach之前检查它是否为空,所以:

if(is_array($spCss) || is_object($spCss)) {
   foreach($spCss as $value){
     //code...
   }
}

因此,对$ spCss和$ pcCss使用相同的逻辑