我有一个自定义注册表,可以通过快捷码插入页面。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”(良好),说明其实际功能:
创建用户,在表单上方显示“电子邮件存在”,我不知道。有什么想法吗?
最合适的回答,由SO网友:s1lv3r 整理而成
这是上面代码的基本版本,它将注册逻辑(在init上处理)与由短代码完成的表单输出分离。
它基本上可以工作,但缺少任何验证,所以只是为了展示概念。
$wpse_email_exists = null;
function registration_form_shortcode() {
global $wpse_email_exists;
$output =
\'<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>\';
echo $wpse_email_exists;
return $output;
}
function manage_my_registration() {
global $wpse_email_exists;
add_shortcode(\'registration-form\', \'registration_form_shortcode\');
if (isset($_POST["registration_submit"])) {
if (email_exists($_POST["email"])) {
$wpse_email_exists = "EMAIL EXISTS";
} else {
$username = $_POST["email"];
$random_password = wp_generate_password(8, false);
$status = wp_create_user($username, $random_password, $_POST["email"]);
$wpse_email_exists = "GOOD";
}
}
}
add_action(\'init\', \'manage_my_registration\');
正如您在循环中已经指出的那样,最初问题中的代码的实际问题是,当其他插件获取内容并解析短代码时,代码会运行两次。