使用add_action和do_action传递参数抛出错误'第一个参数应该是一个有效的回调'

时间:2013-11-27 01:42:08

标签: wordpress

我的WordPress页面上有一个表单,在表单提交时将提交数据发送给第三方服务。该表单使用Gravity Forms后提交API挂钩(http://www.gravityhelp.com/documentation/page/Gform_after_submission),但这不是导致错误的原因。

由于我的JavaScript参数传递出现问题,因此在加载我的网站时出现以下错误:

Warning: call_user_func_array() [function.call-user-func-array]: First argument is expected to be a valid callback, 'aoExtPost' was given in /home2/jcollins/public_html/wp-includes/plugin.php on line 429

我的WordPress主题functions.php文件中包含以下内容:

if (function_exists('load_aoExtPost')) {
    function load_aoExtPost() {
        if (!is_admin()) {
        wp_register_script('ExtPost', get_template_directory_uri() . '/teravoxel/js/ExtPost.js', array(), '0.1', true );
        wp_enqueue_script('ExtPost');
        }
    }
}

//extPostUrl is the argument to pass
$extPostUrl = 'http://www.---webservice---/eform/3122/0027/d-ext-0002';
add_action('gform_after_submission_1', 'ExtPost', 10, 2);
do_action('gform_after_submission_1', $extPostUrl, $entry);

这是被引用的JavaScript的内容:

function aoExtPost(extPostUrl) {
//generate iframe via some echoed out javascript
var aoUrl = extPostUrl;
var aoUrlStr = aoUrlA.toString();
var aoIfrm = document.createElement('iframe');
aoIfrm.setAttribute('id', 'ifrm');
aoIfrm.style.display='none';
aoIfrm.style.width='0px';
aoIfrm.style.height='0px';
aoIfrm.src = aoUrlStr;
document.body.appendChild(aoIfrm);
};

如果我用一个简单的PHP函数替换上面的JS文件引用只是为了测试functions.php中的参数传递,它就可以了。请问有人能告诉我在回复剧本时我出错了吗?

目的是获取$ extPostUrl的内容并将它们移动到JS生成的iframe的source的查询字符串中(这就是我将数据传递给第三方服务的方式)

1 个答案:

答案 0 :(得分:1)

如警告所示,add_action需要有效的回调函数。如果将两个参数传递给钩子:

do_action( 'gform_after_submission_1', $extPostUrl, $entry );

你可以在回调函数中使用(一个或两个)它们的东西:

add_action( 'gform_after_submission_1', 'so20231440_extpost', 10, 2 );
function so20231440_extpost( $extPostUrl, $entry )
{
    // do stuff with $extPostUrl and/or $entry

    // for example:
    wp_enqueue_script( 'extpost' );
    wp_localize_script( 'extpost', 'extpost', array( 'url' => $extPostUrl ) );

    // var usage in JS: extpost.url
}