旧WordPress站点升级PHP后each()报错,如何改用foreach修复?
解决PHP升级后
each()函数未定义的错误 PHP 7.2及以上版本已移除each()函数,这就是你升级WordPress后出现报错的原因。将while(each())替换为foreach循环的思路完全正确,以下是改写后的完整代码:
public function callElementActivities( $tag ) { do_action( 'vc_mapper_call_activities_before' ); if ( isset( $this->element_activities[ $tag ] ) ) { // 替换while(each())为foreach循环 foreach ( $this->element_activities[ $tag ] as $activity ) { // 直接使用$activity,无需再取$activity[1] list ( $method, $params ) = $activity; switch ( $method ) { case 'drop_param': WPBMap::dropParam( $params['name'], $params['attribute_name'] ); break; case 'add_param': WPBMap::addParam( $params['name'], $params['attribute'] ); break; case 'mutate_param': WPBMap::mutateParam( $params['name'], $params['attribute'] ); break; case 'drop_shortcode': WPBMap::dropShortcode( $params['name'] ); break; case 'modify': WPBMap::modify( $params['name'], $params['setting_name'], $params['value'] ); break; } } } }
改动关键点说明
- 原代码中
each()函数每次返回一个包含数组键(索引0)和值(索引1)的数组,while循环依赖这个返回值遍历;改用foreach后,直接遍历$this->element_activities[$tag]的每个值元素,$activity就是原代码中$activity[1]对应的内容 - 因此移除了
each()相关的循环条件,同时将list ( $method, $params ) = $activity[1];改为list ( $method, $params ) = $activity;
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

