我的客户需要自定义注册表。
有人可以帮我这个吗?
答案 0 :(得分:11)
问问WordPress问题的好地方可能是WordPress Answers。 Anyhoo,如果你想在没有插件的情况下解决这个问题,你需要做三件事:
如果有这三个部分,您可以在页面模板中执行以下操作:
<?php
/*
Template Name: Registration
*/
global $current_user;
get_currentuserinfo();
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$company = $_POST['company'];
if (($firstname != '') && ($lastname != '') && ($company != '')) {
// TODO: Do more rigorous validation on the submitted data
// TODO: Generate a better login (or ask the user for it)
$login = $firstname . $lastname;
// TODO: Generate a better password (or ask the user for it)
$password = '123';
// TODO: Ask the user for an e-mail address
$email = 'test@example.com';
// Create the WordPress User object with the basic required information
$user_id = wp_create_user($login, $password, $email);
if (!$user_id || is_wp_error($user_id)) {
// TODO: Display an error message and don't proceed.
}
$userinfo = array(
'ID' => $user_id,
'first_name' => $firstname,
'last_name' => $lastname,
);
// Update the WordPress User object with first and last name.
wp_update_user($userinfo);
// Add the company as user metadata
update_usermeta($user_id, 'company', $company);
}
if (is_user_logged_in()) : ?>
<p>You're already logged in and have no need to create a user profile.</p>
<?php else : while (have_posts()) : the_post(); ?>
<div id="page-<?php the_ID(); ?>">
<h2><?php the_title(); ?></h2>
<div class="content">
<?php the_content() ?>
</div>
<form action="<?php echo $_SERVER['REQUEST_URI'] ?>" method="post">
<div class="firstname">
<label for="firstname">First name:</label>
<input name="firstname"
id="firstname"
value="<?php echo esc_attr($firstname) ?>">
</div>
<div class="lastname">
<label for="lastname">Last name:</label>
<input name="lastname"
id="lastname"
value="<?php echo esc_attr($lastname) ?>">
</div>
<div class="company">
<label for="company">Company:</label>
<input name="company"
id="company"
value="<?php echo esc_attr($company) ?>">
</div>
</form>
</div>
<?php endwhile; endif; ?>
现在,当您想要检索已存储的内容时,您需要知道信息是在User对象本身内还是在元数据中。要检索(登录用户的)名字和姓氏:
global $current_user;
$firstname = $current_user->first_name;
$lastname = $current_user->last_name;
要检索公司名称(已登录用户):
global $current_user;
$company = get_usermeta($current_user->id, 'company');
这是它的基本要点。这里仍然缺少很多东西,例如验证,错误消息输出,WordPress API中发生的错误处理等等。还有一些重要的TODO,你必须在代码甚至可以工作之前处理。代码应该也可以分成几个文件,但我希望这足以让你开始。
答案 1 :(得分:0)
自定义WordPress注册表单比标准表单有两个主要优点。 首先是与网站主题的整体外观的整合。标准表单通常无法很好地与自定义主题配合使用,并且自定义CSS文件始终无法很好地呈现该表单。另一方面,可以轻松设置自定义表单以使用自定义CSS。
使用自定义注册表单的第二个更普遍的原因是可以选择标准表单中不包含的自定义字段。一个小的自定义注册表单可以加快流程,并从简洁的界面中收集所有必要的数据。
function wordpress_custom_registration_form( $first_name, $last_name, $username, $password, $email) {
global $username, $password, $email, $first_name, $last_name;
echo '
<form action="' . $_SERVER['REQUEST_URI'] . '" method="post">
First Name :
<input type="text" name="fname" value="' . ( isset( $_POST['fname']) ? $first_name : null ) . '">
Last Name:
<input type="text" name="lname" value="' . ( isset( $_POST['lname']) ? $last_name : null ) . '">
Username <strong>*</strong>
<input type="text" name="username" value="' . ( isset( $_POST['username'] ) ? $username : null ) . '">
Password <strong>*</strong>
<input type="password" name="password" value="' . ( isset( $_POST['password'] ) ? $password : null ) . '">
Email: <strong>*</strong>
<input type="text" name="email" value="' . ( isset( $_POST['email']) ? $email : null ) . '">
<input type="submit" name="submit" value="Register"/>
</form>
';
}
可以使用简码[wp_registration_form]将其插入任何地方。这是设置短代码的代码片段:
function wp_custom_shortcode_registration() {
ob_start();
wordpress_custom_registration_form_function();
return ob_get_clean();
}
我希望到目前为止,您已经有了创建WordPress自定义注册表单的好主意。如有任何混淆,请检查Build Custom WordPress Registration Forms
答案 2 :(得分:0)
使用自定义注册表单的一个优点是根据用户的需要修改代码变得容易。对于自定义提交表单,您可以使用 Wordpress 中现有的钩子(如 template_redirect
),然后将该钩子映射到某个函数,该函数将对表单进行后处理,例如验证并将数据提交到站点的数据库。您可以参考一篇深入的文章here。
<div class="employee">
<input type="hidden" name="show_msg">
<form name="customer_details" method="POST" required="required" class="input-hidden">
Your Name: <input type="text" id="name" name="customer_name">
Your Email: <input type="text" id="email" name="customer_email">
Company: <input type="text" id="company" name="company">
Sex: <input type="radio" name="customer_sex" value="male">Male <input type="radio" name="customer_sex" value="female">Female
<textarea id="post" name="experience" placeholder="Write something.." style="height:400px;width:100%"></textarea>
<input type="submit" value="Submit">
<!--?php wp_nonce_field( 'wpshout-frontend-post','form-submit' ); ?-->
</form></div>
function wpshout_frontend_post() {
wpshout_save_post_if_submitted();
}
add_action('template_redirect','wpshout_frontend_post', 2);