使用挂钩返回或使用表单数据?

时间:2014-04-30 作者:EHerman

我构建了一个插件,允许用户通过API调用向第三方API提交表单。我想知道是否有可能在数据发送给第三方之前(或之后)添加一个钩子,并返回它以在函数中使用。

理想情况下,用户可以定义自己的函数并钩住我设置的钩子,获取数据并按自己的意愿使用,或者在数据发送到API之前对其进行操作。

if(!empty($p[\'form_data\']))
    {
    parse_str($p[\'form_data\'], $fd);
    if(!empty($fd[\'list-id\']))
        {
        // Create and store the variables needed to add a new subscriber        
        $email  = false;
        $lid  = empty($fd[\'list-id\'];
        $api  = \'api_key\';
        $mv = array();
        $optin  = \'true\';

// Add custom hook, to capture user submitted data
do_action( \'get_form_data\', $p[\'form_data\'] );
        }
    }
理想情况下,用户可以编写一个函数来使用数据(基本示例)。

function catch_user_data( $data ) {
    $user_email = $data[\'email\'];
    update_user_meta( \'1\' , \'user_email\', $user_email );
}
add_action( \'get_form_data\' , \'catch_user_data\' );
我肯定我在这里做错了什么,因为数据在表单提交时没有得到更新。钩子写错了吗?

1 个回复
最合适的回答,由SO网友:A.Jesin 整理而成

如果您想允许用户“在发送到API之前对其进行操作”,我建议使用过滤器而不是操作。

if ( ! empty( $p[\'form_data\'] ) ) {
    parse_str( $p[\'form_data\'], $fd );
    if ( ! empty( $fd[\'list-id\'] ) ) {
        // Create and store the variables needed to add a new subscriber        
        $email  = false;
        $lid  = empty( $fd[\'list-id\'] );
        $api  = \'api_key\';
        $mv = array();
        $optin  = \'true\';

        // Add custom hook, to capture user submitted data
        $p[\'form_data\'] = apply_filters( \'get_form_data\', $p[\'form_data\'] );
    }
}
这将是允许用户操作此数据的代码。

function catch_user_data( $data ) {
    $user_email = $data[\'email\'];
    update_user_meta( \'1\' , \'user_email\', $user_email );
    return str_replace( \'find-something\', \'replace-it\', $data );
}
add_filter( \'get_form_data\' , \'catch_user_data\' );
更多阅读:
http://codex.wordpress.org/Function_Reference/apply_filters
http://codex.wordpress.org/Glossary#Action
http://codex.wordpress.org/Glossary#Filter

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register