【发布时间】:2016-12-04 08:59:35
【问题描述】:
我正在写一个简单的标签导航,我正面临这个问题:
print_office 函数仅在我在 foreach 中时才有效。
//Doesn't work
print_office($loop->posts[0], true);
//Works
foreach ($loop->posts as $index => $post) {
print_office($post, true);
}
print_office 函数利用高级自定义字段的get_field('field_name')。
编辑:
我在print_office 中添加了一个var_dump($office)。
当在foreach 外部调用时,我得到:
object(WP_Post)#317 (24) {
["ID"]=> int(7)
["post_author"]=> string(1) "1"
[.....] //More fields;
}
当调用 inside foreach我得到:
FOREACH:object(WP_Post)#317 (24) {
["ID"]=> int(7)
["post_author"]=> string(1) "1"
[.....] //More fields;
}
所以唯一的区别是:FOREACH:object 而不是 object。
【问题讨论】:
-
php 默认是传值。两者之间应该没有操作差异。基本调试:
var_dump($loop->posts)看看你在处理什么。也许你没有索引0。 -
是
$loop->posts和Array还是ArrayIterator还是什么? -
请出示周边代码。 Wordpress 依赖于一堆全局变量(主要是因为它的年龄和向后兼容性,但无论如何..),所以我可以想到一些原因,但需要更多信息。
-
var_dump($office)打印像FOREACH:object这样的东西 周围有runkit的东西吗? -
foreach构造永远不会操纵函数内的流程!但是foreach会创建您的数组的副本并使用它。所以像foreach(functionX() as $result){}这样的cunstructs 可以在PHP 中工作。但该函数只被调用一次,而不是在每个循环中。
标签: php wordpress foreach advanced-custom-fields