【问题标题】:Wordpress Warning: call_user_func_array() expects parameter 1 to be a valid callback, array must have exactly two membersWordpress 警告:call_user_func_array() 期望参数 1 是有效的回调,数组必须正好有两个成员
【发布时间】:2014-10-05 20:05:51
【问题描述】:

我正在尝试添加一个自定义函数,该函数将添加 Access-Control-Allow-Origin 标头,因为我无法访问服务器上的 .conf 文件。

下面是我的代码;

add_filter( 'wp_headers', array( 'eg_send_cors_headers' ), 10, 1 );

function eg_send_cors_headers( $headers ) {

    $headers['Access-Control-Allow-Origin']      = get_http_origin();
    $headers['Access-Control-Allow-Credentials'] = 'true';

    if ( 'OPTIONS' == $_SERVER['REQUEST_METHOD'] ) {
        if ( isset( $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] ) ) {
                $headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS';
        }

        if ( isset( $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'] ) ) {
            $headers['Access-Control-Allow-Headers'] = $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'];
        }
    }

    return $headers;
}

然后我在保存时收到此错误:

注意:未定义的偏移量:第 873 行 /example/wp-includes/plugin.php 中的 1 警告:call_user_func_array() 期望参数 1 是有效的回调,数组在 /example/wp-includes 中必须恰好有两个成员/plugin.php 第 192 行

【问题讨论】:

    标签: php wordpress cors


    【解决方案1】:

    嗯,我想通了。希望这对其他人有帮助。

    由于我只是调用一个没有方法的函数,所以我只是在 add_filter 函数中删除了我的函数名周围的数组 ()。正如您在示例 #1 here 中看到的那样,如果您只调用带有参数的函数,则只需将函数名称用单引号括起来。

    固定代码如下:

    add_filter( 'wp_headers', 'eg_send_cors_headers', 10, 1 );
    function eg_send_cors_headers( $headers ) {
    
            $headers['Access-Control-Allow-Origin']= get_http_origin(); 
            $headers['Access-Control-Allow-Credentials'] = 'true';
    
    
            if ( 'OPTIONS' == $_SERVER['REQUEST_METHOD'] ) {
    
                if ( isset( $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'] ) ) {
                    $headers['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS';
                }
    
                if ( isset( $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'] ) ) {
                    $headers['Access-Control-Allow-Headers'] = $_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'];
                }
    
            }
    
        return $headers;
    }
    

    【讨论】:

    • 数组格式是当你想注册一个特定的对象方法或静态方法时。见php.net/manual/en/language.types.callable.php
    • 感谢您发布您的解决方案。当我将一个函数移动到一个单独的包含文件中时,我遇到了同样的问题。
    猜你喜欢
    • 2015-10-18
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 2012-10-04
    相关资源
    最近更新 更多