我为自己的目的创建了一个Worldpress插件。 我想在注册表中添加一些额外的字段(名字,姓氏和电话号码)
<?php
function __construct() {
....
add_action( 'register_form', array($this, 'eddpremium_register_additonalfields' ));
add_filter( 'registration_errors', array($this, 'eddpremium_register_errors'), 10, 3 );
add_action( 'user_register', array($this, 'eddpremium_register_fields_save'), 10, 1 );
....
add_action( 'user_contactmethods', array($this, 'eddpremium_mobilenumber_setting' ));
}
register_form
挂钩以及registration_errors
过滤器工作正常,但user_register
没有。看来,应该保存额外字段的函数不会被解雇......
function eddpremium_register_fields_save($user_id) {
$first_name = $_POST["first_name"];
$last_name = $_POST["last_name"];
$mobile_phone = $_POST["mobile_phone"];
// No need to check, variables get checked in registration_errors
update_user_meta($user_id, "first_name", $first_name);
update_user_meta($user_id, "last_name", $last_name);
update_user_meta($user_id, "mobile_phone", $mobile_phone);
//$username = get_userdata($user_id)->user_login;
}
成功注册user_contactmethods
后,Strangley被解雇了。
如何使user_register
挂钩正常工作?
(此功能在注册后不应被解雇,但会被解雇)
此时不应该执行的功能代码:
function eddpremium_mobilenumber_setting() {
$userid = $_GET["user_id"]; // Zu bearbeitende Nutzerid
if(empty($userid)) // wenn aktueller Nutzer eigenes Profil bearbeitet
$userid = get_current_user_id();
$mobile_phone_verified = get_the_author_meta('mobile_phone_verified', $userid);
?>
<tr>
<th><label for="mobile_phone">Handynummer:</label></th>
<td>
<input id="mobile_phone" name="mobile_phone" autocomplete="off" <?php if(empty($mobile_phone_verified) AND !current_user_can( 'manage_options' )) echo 'disabled="disabled"'; ?> placeholder="0791112233" type="tel" value="<?php $mobile_phone = get_the_author_meta( 'mobile_phone', $userid );
echo $mobile_phone ? $mobile_phone : '';?>" />
<?php if(empty($mobile_phone_verified)) {?> <a style='color:red;'>Verifikation erforderlich</a> <?php } else {?>
<a style='color:green;'>Nummer verifiziert</a>
<?php } ?>
</td>
</tr>
<?php
}
答案 0 :(得分:2)
user_register
每次都没有触发,在更新现有的个人资料时,profile_update
被解雇了......
只需将回调添加到这两个操作中,以便在更新时触发;)
add_action( 'user_register', array($this, 'eddpremium_register_fields_save'), 10, 1 );
add_action( 'profile_update', array($this, 'eddpremium_register_fields_save'), 10, 1 );
WP检查是否ID
(用户ID)与表单数据一起传递,如果是,则profile_update
挂起。否则user_register
是。
答案 1 :(得分:-1)
我也是wordpress插件开发的新手。但是,因为'eddpremium_register_fields_save'在add_action方法中调用时无法正常工作,为什么不在add_action方法中定义匿名函数?我认为'eddpremium_register_fields_save'必须具备的论点是导致你的电话出现问题的原因。