以下是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 ?>
产生此警告的代码出了什么问题?
答案 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使用相同的逻辑