WordPress插件WPGetAPI API to Posts中strpos()参数类型错误修复求助
WordPress插件WPGetAPI API to Posts中strpos()参数类型错误修复求助
嘿,我来帮你搞定这个报错!这个问题的原因其实很清晰——咱们来拆解一下:
你提供的代码里,在处理_gallery_images字段时,逻辑是先判断$our_value不是数组的话,就尝试把它转成数组。但问题出在:当代码先处理了逗号分隔的情况后,已经把$our_value转换成数组了,但后续的空格、换行分隔检查还是会继续执行,这时候调用strpos($our_value, ' ')就会把数组传进去,而strpos()要求第一个参数必须是字符串,所以直接触发了那个致命的类型错误。
结合你的API返回值(逗号加空格分隔的URL列表),我给你两种修复思路,都是基于原代码的最小改动,容易上手:
方案一:给每个strpos检查加字符串类型判断
在每个调用strpos()的判断前,先确认$our_value还是字符串,避免数组传入。同时顺便处理掉URL里的多余空格:
// woocommerce field if ( $field === '_gallery_images' ) { // set the image prefix if there is one $prefix = ''; if ( $tmp_field['prefix'] !== '' ) { $prefix = $tmp_field['prefix']; } // if value is not an array, try to create one // this may be due to comma separated urls or space separated if ( ! is_array( $our_value ) ) { // if we have comma separated URL's, create an array if ( is_string($our_value) && strpos( $our_value, ',' ) !== false ) { $array = explode( ',', $our_value ); // 去掉每个URL前后的空格(适配你的API返回格式) $array = array_map('trim', $array); if ( is_array( $array ) ) { $our_value = $array; } } // 只有当$our_value仍是字符串时,才检查空格分隔 if ( is_string($our_value) && strpos( $our_value, ' ' ) !== false ) { $array = explode( ' ', $our_value ); // 过滤连续空格产生的空元素 $array = array_filter($array); if ( is_array( $array ) ) { $our_value = $array; } } // 只有当$our_value仍是字符串时,才检查换行分隔 if ( is_string($our_value) && strpos( $our_value, "\n" ) !== false ) { $array = explode( "\n", $our_value ); $array = array_map('trim', $array); $array = array_filter($array); if ( is_array( $array ) ) { $our_value = $array; } } } }
方案二:统一处理所有分隔符(更简洁)
如果你的API返回的URL只会用逗号、空格、换行其中一种或多种分隔,也可以先把所有分隔符转换成逗号,再统一分割,这样逻辑更简单:
// woocommerce field if ( $field === '_gallery_images' ) { // set the image prefix if there is one $prefix = ''; if ( $tmp_field['prefix'] !== '' ) { $prefix = $tmp_field['prefix']; } // if value is not an array, try to create one if ( ! is_array( $our_value ) && is_string($our_value) ) { // 把换行和空格都替换成逗号 $normalized_value = str_replace(["\n", "\r", ' '], ',', $our_value); // 用逗号分割成数组 $array = explode( ',', $normalized_value ); // 去掉空元素和每个URL的多余空格 $array = array_filter(array_map('trim', $array)); $our_value = $array; } }
注意事项
- 修改前一定要备份原插件文件(就是那个
class-wpgetapi-api-to-posts-importer.php),避免改错了无法恢复; - 如果你用的是方案一,刚好适配你提供的API返回格式(逗号加空格),处理后每个URL都会是干净的;
- 插件更新后可能会覆盖你的修改,所以最好把这个修复逻辑记下来,或者考虑用自定义插件来重写这个方法(不过对于新手来说,直接修改原文件更直接)。
内容来源于stack exchange
相关产品推荐
相关产品推荐

