Php 用于Wordpress/Woocommerce注册后检查表单数据的钩子;添加函数

Php 用于Wordpress/Woocommerce注册后检查表单数据的钩子;添加函数,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,我所拥有的: WooCommerce创建的登录页面 MC4WP(用于Wordpress的Mailchimp)添加了一个复选框 由成员管理的角色插件 我想做的是: 当用户注册时,如果他们选中了复选框,我想为他们分配一个额外的角色。(不要将他们的角色从默认的woocommerce客户更新为其他客户;尝试添加其他角色) 我已成功使用另一个表单分配了多个角色,但没有添加复选框或woocommerce表单的步骤 我试过挂接用户注册、个人资料更新,甚至是woocommerce创建的客户,但到目前为止都没

我所拥有的:

  • WooCommerce创建的登录页面
  • MC4WP(用于Wordpress的Mailchimp)添加了一个复选框
  • 由成员管理的角色插件
我想做的是: 当用户注册时,如果他们选中了复选框,我想为他们分配一个额外的角色。(不要将他们的角色从默认的woocommerce客户更新为其他客户;尝试添加其他角色)

我已成功使用另一个表单分配了多个角色,但没有添加复选框或woocommerce表单的步骤

我试过挂接用户注册、个人资料更新,甚至是woocommerce创建的客户,但到目前为止都没有成功

我不确定我的问题在哪里,但我发现: 当包含源代码中的复选框名称时,表单提交后会出现500错误。已注册用户(仅限客户角色)。 如果我在那里输入一个垃圾名称,没有错误

我不确定我误解了什么(或者完全没有理解)。 感谢您的帮助/想法

//add_action( 'user_register', 'check_the_form_box_add_role');
//add_action('woocommerce_created_customer', 'check_the_form_box_add_role');


add_action('profile_update', 'check_the_form_box_add_role');

function check_the_form_box_add_role( $user_id ) {

    if ( isset($_POST['_mc4wp_subscribe_wp-registration-form']) ) {
            $user_id = wp_insert_user( $user_id );
            $role_to_add = 'thisistherole;

            $user_id->add_role($role_to_add);
        }


}
源代码中的表单:

<form method="post" class="register">
<p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
<label for="reg_email">Email address <span class="required">*</span></label>
<input type="email" class="woocommerce-Input woocommerce-Input--text input-text" name="email" id="reg_email" value=""/>
</p>

<div style="left: -999em; position: absolute;"><label for="trap">Anti-spam</label><input type="text" name="email_2" id="trap" tabindex="-1"/></div>
 <input type="hidden" name="_mc4wp_subscribe_wp-registration-form" value="0"/><p class="mc4wp-checkbox mc4wp-checkbox-wp-registration-form"><label><input type="checkbox" name="_mc4wp_subscribe_wp-registration-form" value="1" checked="checked"/><span>This is text for checkbox!</span></label></p> 
<p class="woocomerce-FormRow form-row">
<input type="hidden" id="_wpnonce" name="_wpnonce" value="994ca0c618"/><input type="hidden" name="_wp_http_referer" value="/my-account/"/> <input type="submit" class="woocommerce-Button button" name="register" value="Register"/>
</p>
</form>
添加附加角色。

如果有人需要,请执行以下操作: 我之前挂接用户注册是正确的。 问题是我没有得到WPUser对象,因此在该对象不可用时调用add_role()。传递id以获取用户数据似乎解决了这个问题

add_action('user_register', 'name_of_function', 10, 1);

function name_of_function( $user_id ) {

        if ( isset($_POST['_mc4wp_subscribe_wp-registration-form'])  && 
             $_POST['_mc4wp_subscribe_wp-registration-form'] == '1') 
           {
            $useridid = get_userdata( $user_id );

            $role_to_add = 'thisistherole';

            $useridid->add_role($role_to_add);
           }
        else 
       {
        //do nothing
       }
}
有关获取用户数据的更多信息: 和在用户注册上:

add_action('user_register', 'name_of_function', 10, 1);

function name_of_function( $user_id ) {

        if ( isset($_POST['_mc4wp_subscribe_wp-registration-form'])  && 
             $_POST['_mc4wp_subscribe_wp-registration-form'] == '1') 
           {
            $useridid = get_userdata( $user_id );

            $role_to_add = 'thisistherole';

            $useridid->add_role($role_to_add);
           }
        else 
       {
        //do nothing
       }
}