EMAIL_EXISTS在短码中有问题

时间:2013-09-05 作者:joko13

我有一个自定义注册表,可以通过快捷码插入页面。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”(良好),说明其实际功能:

创建用户,在表单上方显示“电子邮件存在”,我不知道。有什么想法吗?

2 个回复
最合适的回答,由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\');
正如您在循环中已经指出的那样,最初问题中的代码的实际问题是,当其他插件获取内容并解析短代码时,代码会运行两次。

SO网友:Ben Miller - Remember Monica

您正在呼叫email_exists 即使您的电子邮件地址无效。尝试更改if (email_exists($email))elseif, 像这样:

$email = is_email($_POST["email"]);
if (!$email) {
  $error = TRUE;
  $errorMsg = "EMAIL NOT VALID";
}
elseif (email_exists($email)) {
  $error = TRUE;
  $errorMsg = "EMAIL EXISTS";
}

结束

相关推荐

如何覆盖Shortcodes.php核心文件?

我想覆盖/更新核心短代码。php文件。构建一个数组并向其他函数发送不同的数据,但我的问题是如何在不编辑核心文件的情况下做到这一点?是否有覆盖核心文件和/或函数的最佳做法?