我有一个自定义注册表,可以通过快捷码插入页面。shortcode函数如下所示:
function custom_registration_form_shortcode() {
$error = FALSE;
if (isset($_POST["submit"])) {
//Get other $_POST data here
$email = is_email($_POST["email"]);
if (!$email) {
$error = TRUE;
$errorMsg = "EMAIL NOT VALID";
}
if (email_exists($email)) {
$error = TRUE;
$errorMsg = "EMAIL EXISTS";
}
}
if (!$error) {
// Creating random password, setting username, wp_create_user, etc. working fine
$output = "GOOD";
}
// Some other stuff here that does not set $error to TRUE
if ($error) {
$output = $errorMsg;
}
return $output;
}
function jogol_add_shortcodes() {
add_shortcode(\'jogol-registration-form\', \'custom_registration_form_shortcode\');
}
add_action(\'init\', \'jogol_add_shortcodes\');
所发生的情况是,用户得到了良好的注册,但它仍然返回“EMAIL EXISTS”,就好像wp\\u create\\u user在EMAIL\\u EXISTS($EMAIL)之前执行,或者代码在提交时运行两次一样。我快发疯了,非常感谢您的帮助/提示。谢谢
UPDATE:这是一个精简版。无验证。仅用于测试目的。
function registration_form_shortcode() {
if (isset($_POST["registration_submit"])) {
if (email_exists($_POST["email"])) {
$output = "EMAIL EXISTS";
} else {
$username = $_POST["email"];
$random_password = wp_generate_password(8, false);
$status = wp_create_user($username, $random_password, $_POST["email"]);
$output = "GOOD";
}
}
$form =
\'<form name="registration" action="\'.esc_url($_SERVER[\'REQUEST_URI\']).\'" method="post">
<label for="email">Email</label>
<input type="text" name="email" value="\'.$_POST["email"].\'" />
<input type="submit" name="registration_submit" value="Send" />
</form>\';
$output .= $form;
return $output;
}
function add_my_shortcodes() {
add_shortcode(\'registration-form\', \'registration_form_shortcode\');
}
add_action(\'init\', \'add_my_shortcodes\');
我做了什么(请你试试):将该代码放入我的主题函数中。php通过[注册表]向页面添加了短代码,当我输入一个尚未在WP安装中注册的有效电子邮件地址并点击发送按钮时,它应该做什么:
创建用户,在表单上方显示“GOOD”(良好),说明其实际功能:
创建用户,在表单上方显示“电子邮件存在”,我不知道。有什么想法吗?