自定义表单挂钩到“user_register”

时间:2015-02-18 14:27:44

标签: php wordpress forms hook

我需要做的是在用户订阅我的Wordpress网站的同一时间发送自定义表单。 我正在使用hook add_action“user_register”,这是我的代码:

<?php

    add_action('user_register', 'my_function');

    function my_function($user_id) { 

    $user_info = get_userdata($user_id);
    $username = $user_info->user_login;
    $mail = $user_info->user_email; 

?>

    <form id="my-form" action="http://....." method="get">
      <input type="hidden" name="list" value="9">
      <input type="email" name="email" value="<?php echo $mail; ?>">
      <input type="hidden" name="campo1" value="campo1">
      <input type="hidden" name="username" value="<?php echo $username; ?>">
      <input type="submit" />
    </form>

    <script type="text/javascript">
        document.getElementById('my-form').submit();
    </script>

<?php } ?>

我做错了什么?功能正常,钩子也有不同的功能。 例如,我尝试了类似的东西:

<?php 

    add_action('user_register', 'my_function');

    function my_function($user_id) { 

    $user_info = get_userdata($user_id);
    $username = $user_info->user_login;
    $mail = $user_info->user_email;

    update_option('mail_test', $mail); 

} ?>

有什么想法吗?在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不建议挂钩user_registration操作,当用户从wp-admin注册或在后端创建用户时会发生什么? Wordpress将尝试发送一些不存在的随机表单数据,这可能会导致问题。

执行此操作的方法是在验证表单数据后以编程方式创建用户。你可以这样做......

if( $_POST ) {

    //Do all your validation then if all is correct use the following
    $password = wp_generate_password( 12, false );
    $user_id = wp_create_user( $email, $password, $username );

    //Set the user information
    wp_update_user(
        array(
            'ID'                => $user_id,
            'nickname'          => $firstname . ' ' . $lastname,
            'display_name'      => $firstname . ' ' . $lastname,
            'first_name'        => $firstname,
            'last_name'         => $lastname
        )
    );

}

用您喜欢的任何内容替换用户电子邮件和姓名的所有变量,并且不要忘记使用此方法,用户将不会自动收到任何确认,因此您必须向他们显示他们的登录信息和成功消息中的密码或使用wp_mail向他们发送电子邮件。

希望有所帮助

此致