从ACF中继器字段创建多个用户

时间:2015-01-28 15:25:58

标签: wordpress advanced-custom-fields

我正在使用Repeater字段,管理员将在其中创建名称和电子邮件地址列表。保存(或更新)名称列表后,我想根据名称和电子邮件地址创建新用户。这是我到目前为止的代码:

add_filter('acf/update_value/name=team_member', 'add_new_user', 10, 3);

function add_new_user( $value, $post_id, $field ) {
if(isset($value) && $value != '') {

    if( get_field('team_member') ) {
        while( has_sub_field('team_member')) {

            $user_name = strtolower( get_sub_field('member_fname') ) . '_' . strtolower( get_sub_field('member_lname') ) ;
            $pw = wp_generate_password( $length=12, $include_standard_special_chars=false );
            $user_email = get_sub_field('member_email_address');

    $value = wp_insert_user( array(
                'user_login' => $user_name,
                'user_pass' => $pw,
                'user_email' => $user_email
            ));

        }       
    }
}
return $value;
}

此代码存在以下两个问题:

  1. 它只为列表中的第一个名称创建一个用户帐户
  2. 由于某些奇怪的原因,当“选项”页面保存/更新时,选项页面上会创建30个新的空白行。
  3. 有关如何使这项工作的任何想法?感谢

    更新1

    我已根据Aibrean的建议更新了代码,列表中的所有名称都保存为用户。

    add_filter('acf/update_value/name=team_member', 'add_new_user', 10, 3);
    function add_new_user( $value, $post_id, $field ) {
    
    if(isset($value) && $value != '') {
    
        if( have_rows('team_member') ) :
                while( have_rows('team_member') ) : the_row();
    
                    $user_name = strtolower( get_sub_field('member_fname') ) . '_' . strtolower( get_sub_field('member_lname') ) ;
                    $pw = wp_generate_password( $length=12, $include_standard_special_chars=false );
                    $user_email = get_sub_field('member_email_address');
    
                $value = wp_insert_user( array(
                    'user_login' => $user_name,
                    'user_pass' => $pw,
                    'user_email' => $user_email
                ));
    
            endwhile; 
        endif;
    }
    
    return $value;
    }
    

    此代码成功将每个名称保存为新的WP用户,但以下是现在出现的两个问题:

    1. 正在移除除转发器字段的所有行。列表上的名称已消失,但用户已创建。
    2. 由于某种原因创建了30个额外的行。

0 个答案:

没有答案