我构建了一个插件,允许用户通过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