我正在尝试向WP Multisite注册添加自定义字段。我找到了显示我的字段的挂钩,但我无法将其值保存到用户配置文件,因为要这样做,我需要用户ID,但在用户通过电子邮件中的链接确认注册之前,我假设用户ID不存在。我尝试了以下代码:
add_action( \'wpmu_new_user\', \'phone_register_extra_fields\' );
function phone_register_extra_fields ( $user_id, $password = "", $meta = array() ) {
$phone_number = filter_var($_POST[\'phone_number\'], FILTER_SANITIZE_NUMBER_INT);
update_user_meta( $user_id, \'phone_number\', $phone_number );
}
如何将字段值保存到尚未具有ID的挂起用户配置文件?上面的函数update\\u user\\u meta()无效,因为它需要用户ID。
我发现,可以在这个钩子上访问用户ID(在通过电子邮件链接激活博客和用户之后):
add_action( \'wpmu_activate_blog\', \'mu_add_phone_after_activation\', 10, 3 );
function mu_add_phone_after_activation( $blog_id, $user_id, $password, $signup_title, $meta ) {
$user_phone = \'TESTnumber\';
// $user_phone = $meta[\'user_phone\']; // How to put data in the $meta[\'user_phone\']? On which hook to take it from a $_POST[\'user_phone\'] ?
update_user_meta( $user_id, \'phone_number\', $user_phone );
}
但我需要存储多站点用户和博客注册页表单中的电话号码。可能可以将其存储在
$meta 变量,但我尝试了很多挂钩,但都没有成功。可能是做错了。以下是我尝试的方式:
add_filter( \'signup_user_meta\', \'mu_add_phone_in_signup\', 10, 4 );
function mu_add_phone_in_signup( $meta, $domain, $path, $title, $user, $user_email, $key ) {
$meta[\'phone_number\'] = \'1111111\';
return $meta;
}
add_filter( \'add_signup_meta\', \'mu_add_phone_in_signup2\', 10, 4 );
function mu_add_phone_in_signup2( $meta_defaults = array() ) {
$meta_defaults = array( \'phone_number\' => \'11111111\' );
return $meta_defaults;
}
add_filter( \'signup_site_meta\', \'mu_add_phone_in_signup3\', 10, 4 );
function mu_add_phone_in_signup3( $domain, $path, $title, $user, $user_email, $key, $meta ) {
$meta[\'phone_number\'] = \'11111111\';
return $meta;
}
我没有太多经验,所以我快疯了,三天都做不到。感谢您的帮助:)谢谢!
SO网友:Andrew
我很好地做到了这一点:
// Sending custom field data to $meta
add_filter(\'add_signup_meta\', \'sb_add_signup_meta\');
function sb_add_signup_meta($meta) {
if( isset( $_POST[\'phone_number\'] ) ) {
$phone_number = filter_var( $_POST[\'phone_number\'], FILTER_SANITIZE_NUMBER_INT );
$meta[\'phone_number\'] = $phone_number;
return $meta;
}
else return $meta;
}
// Updating user meta on user activation. Works only if user chose registration without a blog
add_action(\'wpmu_activate_user\',\'activate_user\',10,3);
function activate_user( $user_id, $password, $meta ) {
if ( isset( $meta[\'phone_number\'] ) ) {
update_user_meta( $user_id, "phone_number", $meta[\'phone_number\'] );
}
}
// Updating user meta on user activation when user has regisration + gets a blog.
add_action( \'wpmu_activate_blog\', \'mu_add_roles_after_activation\', 10, 3 );
function mu_add_roles_after_activation( $blog_id, $user_id, $password, $signup_title, $meta ) {
$user_info = get_userdata( $user_id );
$user_login = $user_info->user_login;
global $wpdb;
$signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE user_login = %s", $user_login ) );
$meta = maybe_unserialize( $signup->meta );
if ( isset( $meta[\'phone_number\'] ) ) {
update_user_meta( $user_id, "phone_number", $meta[\'phone_number\'] );
}
}
也许WP开发人员应该做钩子
wpmu_activate_user 当用户+博客被激活时工作,因为用户在这里仍然处于激活状态,令人困惑
wpmu_activate_user 钩子对激活博客的用户不起作用。而且,每次都连接到DB并不是最佳做法。所以,如果你有更好的想法,我会很感激的。