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

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;
    }
}

注意事项

  1. 修改前一定要备份原插件文件(就是那个class-wpgetapi-api-to-posts-importer.php),避免改错了无法恢复;
  2. 如果你用的是方案一,刚好适配你提供的API返回格式(逗号加空格),处理后每个URL都会是干净的;
  3. 插件更新后可能会覆盖你的修改,所以最好把这个修复逻辑记下来,或者考虑用自定义插件来重写这个方法(不过对于新手来说,直接修改原文件更直接)。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:25:31