【发布时间】:2017-07-26 06:36:40
【问题描述】:
我正在通过以下步骤创建一个用于用户注册的自定义插件:
创建我的 HTML 表单字段的函数
function render_registration_form() {
ob_start();
...
<input type="hidden" id="register_nonce" name="register_nonce" value="<?php wp_create_nonce('generate-nonce'); ?>" />
//Above line does not create a nonce at all
...
return ob_get_clean();
}
用作显示上述表单的简码的函数
function custom_user_registration_form() {
//Render registration form only if user is not logged in already!
if(!is_user_logged_in()) {
$registration_enabled = get_option('users_can_register');
if($registration_enabled) {
$output = render_registration_form(); (written above)
} else {
$output = __('User registration is not enabled');
}
return $output;
} else {
return _e('You are already logged in!');
}
}
add_shortcode('register-user', 'custom_user_registration_form');
验证新用户并将其与元数据一起添加到数据库的函数:
function validate_and_create_user() {
if(isset($_POST['txt_username']) && wp_verify_nonce($_POST['register_nonce'], 'register-nonce')) {
$user_data = array(
'user_login' => $loginid,
'user_pass' => $password,
'user_nicename' => $first_name,
'display_name' => $first_name . ' ' . $last_name,
'user_email' => $email,
'first_name' => $first_name,
'last_name' => $last_name,
'user_registered' => date('Y-m-d H:i:s'),
'role' => 'subscriber'
);
$new_user_id = wp_insert_user($user_data);
...
}
add_action('init', 'validate_and_create_user');
由于没有在表单内创建 nonce 值,因此检查 wp_verify_nonce($_POST['register_nonce'], 'register-nonce') 总是失败,并且没有用户数据保存在数据库中。
根据https://codex.wordpress.org/Pluggable_Functions
可插拔功能不再添加到 WordPress 核心。所有新函数都在其输出上使用过滤器,以允许类似地覆盖其功能。
我是 WordPress 新手。不知道如何解决这个问题!任何帮助都会对我有很大帮助。
【问题讨论】: