You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

旧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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 12:35:15