WordPress插件core.php报Undefined offset: 1错误排查求助
错误原因
Undefined offset: 1 是PHP数组索引越界报错,对应你代码第2178行的$attachment = $attachements_to_attach_single [1]; 语句:遍历$attachements_to_attach时,存在至少一个子数组不包含索引为1的元素,直接访问触发报错。
常见触发场景:
- 上游构造
$attachements_to_attach数组的逻辑存在缺陷,部分子项仅写入了索引0对应的文件路径,遗漏了索引1对应的附件配置参数 - 部分附件上传、拉取失败,导致写入数组的子项结构不完整
- 代码中
attachements为拼写错误(正确拼写为attachments),如果上游赋值时用了正确拼写,也会导致数组结构缺失
解决办法
临时修复(直接避免报错)
在foreach循环最开头新增结构校验,过滤掉不完整的子项,修改后代码如下:
if (isset ( $attachements_to_attach ) && count ( $attachements_to_attach ) > 0) { require_once (ABSPATH . 'wp-admin/includes/image.php'); foreach ( $attachements_to_attach as $attachements_to_attach_single ) { // 新增校验:子项结构不完整则跳过,避免报错 if (!isset($attachements_to_attach_single[0], $attachements_to_attach_single[1])) { // 可选:写入错误日志,方便后续排查上游问题 error_log('异常附件数据:' . print_r($attachements_to_attach_single, true)); continue; } $file = $attachements_to_attach_single [0]; $attachment = $attachements_to_attach_single [1]; $post_id = $id; if (! function_exists ( 'wp_plugin_filter_image_sizes' )) { function wp_plugin_filter_image_sizes($sizes) { $sizes = array (); return $sizes; } } if (! in_array ( 'OPT_FEED_MEDIA_ALL', $camp_opt )) { add_filter ( 'intermediate_image_sizes_advanced', 'wp_plugin_filter_image_sizes' ); } $attach_id = wp_insert_attachment ( $attachment, $file, $post_id ); $attach_data = wp_generate_attachment_metadata ( $attach_id, $file ); wp_update_attachment_metadata ( $attach_id, $attach_data ); } // remove sizes filter remove_filter ( 'intermediate_image_sizes_advanced', 'wp_plugin_filter_image_sizes' ); }
根治方案
- 回溯
$attachements_to_attach数组的赋值逻辑,检查是否存在数据校验遗漏、拼写不一致的问题,保证所有写入该数组的子项都包含2个元素 - 可选优化:将数字索引数组改为关联数组,比如上游构造时使用
['file_path' => $file, 'attachment_config' => $attachment]的格式,取值时用对应键名,避免硬编码数字索引带来的维护问题
内容的提问来源于stack exchange,提问作者dhikamedia
相关产品推荐
相关产品推荐

