我构建了一个插件,允许用户通过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\' );
 我肯定我在这里做错了什么,因为数据在表单提交时没有得到更新。钩子写错了吗?
 
                    最合适的回答,由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_filtershttp://codex.wordpress.org/Glossary#Actionhttp://codex.wordpress.org/Glossary#Filter