开源欣赏wordpress之用户新增user-new.php
require_once( dirname( __FILE__ ) . '/admin.php' );
引入根文件。
if ( is_multisite() ) {
if ( ! current_user_can( 'create_users' ) && ! current_user_can( 'promote_users' ) )
wp_die( __( 'Cheatin’ uh?' ) );
} elseif ( ! current_user_can( 'create_users' ) ) {
wp_die( __( 'Cheatin’ uh?' ) );
}
用户权限验证,封装在方法当中了。
用户信息输入完后,跳转到列表。是这么个流程。

用户列表有批量操作的多选按钮。同时有新增用户,等管理。
同时可以根据多个条件进行搜索。搜索过程中子页面是跳转的。结果信息直接在头部提示。
我们继续看代码。
$user_details = null;
if ( false !== strpos($_REQUEST[ 'email' ], '@') ) {
$user_details = get_user_by('email', $_REQUEST[ 'email' ]);
} else {
if ( is_super_admin() ) {
$user_details = get_user_by('login', $_REQUEST[ 'email' ]);
} else {
wp_redirect( add_query_arg( array('update' => 'enter_email'), 'user-new.php' ) );
die();
}
}
一些逻辑验证,方法封装,很多可以具有通用性。比如wp_redirect()就特别具有通用性,一个项目中离不开页面跳转。

这种简洁的页面设计就特别有意思。背景变红,边框变红。

这次的错误提示是提交后,后台反馈的。
很有意思。前后端同时验证。
<div class="error below-h2">
<p><strong>错误</strong>:请填写用户名。</p><p><strong>错误</strong>:此用户名包含无效字符,请输入有效的用户名。</p><p><strong>错误</strong>:电子邮件地址不正确。</p> </div>
这就是html的内容,是在div层中展示出来的。
// Adding an existing user to this blog
$new_user_email = $user_details->user_email;
$redirect = 'user-new.php';
$username = $user_details->user_login;
$user_id = $user_details->ID;
if ( ( $username != null && !is_super_admin( $user_id ) ) && ( array_key_exists($blog_id, get_blogs_of_user($user_id)) ) ) {
$redirect = add_query_arg( array('update' => 'addexisting'), 'user-new.php' );
}
进行用户已存在验证。
$newuser_key = substr( md5( $user_id ), , );
add_option( 'new_user_' . $newuser_key, array( 'user_id' => $user_id, 'email' => $user_details->user_email, 'role' => $_REQUEST[ 'role' ] ) );
$roles = get_editable_roles();
$role = $roles[ $_REQUEST['role'] ];
/* translators: 1: Site name, 2: site URL, 3: role, 4: activation URL */
$message = __( 'Hi,
You\'ve been invited to join \'%1$s\' at
%$s with the role of %$s.
Please click the following link to confirm the invite:
%$s' );
wp_mail( $new_user_email, sprintf( __( '[%s] Joining confirmation' ), get_option( 'blogname' ) ), sprintf( $message, get_option( 'blogname' ), home_url(), wp_specialchars_decode( translate_user_role( $role['name'] ) ), home_url( "/newbloguser/$newuser_key/" ) ) );
$redirect = add_query_arg( array('update' => 'add'), 'user-new.php' );
通过验证,各种欢迎。
if ( isset($_GET['update']) ) {
$messages = array();
if ( is_multisite() ) {
switch ( $_GET['update'] ) {
case "newuserconfirmation":
$messages[] = __('Invitation email sent to new user. A confirmation link must be clicked before their account is created.');
break;
case "add":
$messages[] = __('Invitation email sent to user. A confirmation link must be clicked for them to be added to your site.');
break;
case "addnoconfirmation":
$messages[] = __('User has been added to your site.');
break;
case "addexisting":
$messages[] = __('That user is already a member of this site.');
break;
case "does_not_exist":
$messages[] = __('The requested user does not exist.');
break;
case "enter_email":
$messages[] = __('Please enter a valid email address.');
break;
}
} else {
if ( 'add' == $_GET['update'] )
$messages[] = __('User added.');
}
}
消息提示,分类提示,很有意思。貌似这个也是封装好的内容。
<?php if ( isset($errors) && is_wp_error( $errors ) ) : ?>
<div class="error">
<ul>
<?php
foreach ( $errors->get_error_messages() as $err )
echo "<li>$err</li>\n";
?>
</ul>
</div>
<?php endif;
if ( ! empty( $messages ) ) {
foreach ( $messages as $msg )
echo '<div id="message" class="updated"><p>' . $msg . '</p></div>';
} ?>
<?php if ( isset($add_user_errors) && is_wp_error( $add_user_errors ) ) : ?>
<div class="error">
<?php
foreach ( $add_user_errors->get_error_messages() as $message )
echo "<p>$message</p>";
?>
</div>
<?php endif; ?>
错误信息展示,如果有的话,将div展示出来。这就是前端的逻辑,可以卸载tpl中。
<table class="form-table">
<tr class="form-field form-required">
<th scope="row"><label for="user_login"><?php _e('Username'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
<td><input name="user_login" type="text" id="user_login" value="<?php echo esc_attr($new_user_login); ?>" aria-required="true" /></td>
</tr>
<tr class="form-field form-required">
<th scope="row"><label for="email"><?php _e('E-mail'); ?> <span class="description"><?php _e('(required)'); ?></span></label></th>
<td><input name="email" type="text" id="email" value="<?php echo esc_attr($new_user_email); ?>" /></td>
</tr>
<?php if ( !is_multisite() ) { ?>
<tr class="form-field">
<th scope="row"><label for="first_name"><?php _e('First Name') ?> </label></th>
<td><input name="first_name" type="text" id="first_name" value="<?php echo esc_attr($new_user_firstname); ?>" /></td>
</tr>
<tr class="form-field">
<th scope="row"><label for="last_name"><?php _e('Last Name') ?> </label></th>
<td><input name="last_name" type="text" id="last_name" value="<?php echo esc_attr($new_user_lastname); ?>" /></td>
</tr>
<tr class="form-field">
<th scope="row"><label for="url"><?php _e('Website') ?></label></th>
<td><input name="url" type="text" id="url" class="code" value="<?php echo esc_attr($new_user_uri); ?>" /></td>
</tr>
<?php
/**
* Filter the display of the password fields.
*
* @since 1.5.1
*
* @param bool True or false, based on if you want to show the password fields. Default is true.
*/
if ( apply_filters( 'show_password_fields', true ) ) : ?>
<tr class="form-field form-required">
<th scope="row"><label for="pass1"><?php _e('Password'); ?> <span class="description"><?php /* translators: password input field */_e('(required)'); ?></span></label></th>
<td>
<input workaround -->
<input name="pass1" type="password" id="pass1" autocomplete="off" />
</td>
</tr>
<tr class="form-field form-required">
<th scope="row"><label for="pass2"><?php _e('Repeat Password'); ?> <span class="description"><?php /* translators: password input field */_e('(required)'); ?></span></label></th>
<td>
<input name="pass2" type="password" id="pass2" autocomplete="off" />
<br />
<div id="pass-strength-result"><?php _e('Strength indicator'); ?></div>
<p class="description indicator-hint"><?php _e('Hint: The password should be at least seven characters long. To make it stronger, use upper and lower case letters, numbers and symbols like ! " ? $ % ^ & ).'); ?></p>
</td>
</tr>
<tr>
<th scope="row"><label for="send_password"><?php _e('Send Password?') ?></label></th>
<td><label for="send_password"><input type="checkbox" name="send_password" id="send_password" <?php checked( $new_user_send_password ); ?> /> <?php _e('Send this password to the new user by email.'); ?></label></td>
</tr>
<?php endif; ?>
<?php } // !is_multisite ?>
<tr class="form-field">
<th scope="row"><label for="role"><?php _e('Role'); ?></label></th>
<td><select name="role" id="role">
<?php
if ( !$new_user_role )
$new_user_role = !empty($current_role) ? $current_role : get_option('default_role');
wp_dropdown_roles($new_user_role);
?>
</select>
</td>
</tr>
<?php if ( is_multisite() && is_super_admin() ) { ?>
<tr>
<th scope="row"><label for="noconfirmation"><?php _e('Skip Confirmation Email') ?></label></th>
<td><label " <?php checked( $new_user_ignore_pass ); ?> /> <?php _e( 'Add the user without sending them a confirmation email.' ); ?></label></td>
</tr>
<?php } ?>
</table>
验证页面的表单设计。
<?php
/** This action is documented in wp-admin/user-new.php */
do_action( 'user_new_form', 'add-new-user' );
?>
<?php submit_button( __( 'Add New User '), 'primary', 'createuser', true, array( 'id' => 'createusersub' ) ); ?>
</form>
<?php } // current_user_can('create_users') ?>
</div>
<?php
include( ABSPATH . 'wp-admin/admin-footer.php' );
一些尾文件的引入。
很有意思。php还可以这么玩。
开源欣赏wordpress之用户新增user-new.php的更多相关文章
- 开源欣赏wordpress之文章新增页面如何实现。
本地网址http://localhost/wordpress/wp-admin/post-new.php 进而找到post-new.php页面. 进入之后, require_once( dirname ...
- 开源欣赏wordpress之intall.php
引导式安装 $weblog_title = isset( $_POST['weblog_title'] ) ? trim( wp_unslash( $_POST['weblog_title'] ) ) ...
- 开源欣赏wordpress之post.php
switch($action) { case 'postajaxpost': case 'post': case 'post-quickpress-publish': case 'post-quick ...
- WordPress 前端用户投稿插件 Frontend Publishing
WordPress添加投稿功能(无需注册/可邮件通知站长和投稿人) WordPress匿名投稿插件:DX-Contribute (有朋友反馈不能用) WordPress投稿插件:User Submit ...
- WordPress的用户系统总结
原文发表自我的个人主页,欢迎大家訪问~转载请保留本段,或注明原文链接:http://www.hainter.com/wordpress-user-module keyword:WordPress,用户 ...
- 【php增删改查实例】第十六节 - 用户新增
6.1工具栏 <div id="toolbar"> <a href="javascript:openDialog()" class=" ...
- 【Java框架型项目从入门到装逼】第十三节 用户新增功能完结篇
这一节,我们把用户新增的功能继续做一个完善.首先,新增成功后,需要给前台返回一个信息,就是告诉浏览器,这次用户新增的操作到底是成功了呢,还是失败了呢?为此,我们需要专门引入一个结果类,里面只有两个属性 ...
- 【Java框架型项目从入门到装逼】第十一节 用户新增之把数据传递到后台
让我们继续来做"主线任务",这一节,我们来做具体的用户新增功能.首先,为了简单起见,我把主页面改了一些,改的是列表那一块.删去了一些字段,和数据库表对应一致: 现在,我们要实现一个 ...
- Adminimize 插件:WordPress根据用户角色显示/隐藏某些后台功能
倡萌刚才分享了 WordPress根据用户角色隐藏文章/页面的功能模块(Meta Boxes),如果你还想根据不同用户角色显示或隐藏后台的某些功能,比如 顶部工具条.左边导航菜单.小工具.仪表盘.菜单 ...
随机推荐
- Spring-AOP实践 - 统计访问时间--StopWatch
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...
- Shell工具:jsondiff.sh
逻辑很简单,无非就是通过curl在不同的服务器上取得结果集,然后diff即可,不过这里有几点需要注意的地方:首先,JSON就一行,直接 diff会失去意义:其次,JSON中汉字会被编码,不利于查看:另 ...
- Fish’s mission
Fish’s mission 也就是求一个坐标到各个食堂的距离和最小,随机化做应该也是可以的.标程用的方法是利用单调性,不断尝试四个方向,二分的方法做的.实际上就是蚁群退火算法. #include & ...
- STL适配器的初步理解
c++中的适配器有三种:容器适配器,迭代器适配器,函数适配器.下面一一介绍: 1.容器适配器:因为这些容器都是基于其他标准容器实现的所以叫做容器的适配器,具体的有stack,queue,priorit ...
- jquery ajax 局部table 刷新技术
点击查询:
- Unity5 游戏小实例(方块男去打架吧)
开发了将近半个月,最近进入一家游戏公司下班时间都是9点钟. 回到家里哪里还有时间去搞其他小东西, =.=这个小实例一直拖得太长了,先上一个版本.以后在慢慢修改. 项目下载地址: http://yu ...
- springmvc工作原理和环境搭建
SpringMVC工作原理 上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServle ...
- 浅谈NoSQL之MongoDB数据库
对于SQL数据库(关系型数据库)我们大家都有所了解,比如MySQL,sqlserver,oracle等数据库.在日常的开发过程中我们遇到服务器端的数据存储时几乎第一反应就是使用SQL据库像我们最常见的 ...
- android:launchMode="singleTask" 与 onNewIntent(Intent intent) 的用法
最近项目开发中用到了android:launchMode="singleTask" 和 onNewIntent(Intent intent)两个特性,现总结一下经验: androi ...
- Oracle 学习笔记 19 -- 触发器和包浅析(PL/SQL)
触发器是存放在数据库中的一种特殊类型的子程序.不能被用户直接调用,而是当特定事件或操作发生时由系统自己主动 调用执行.触发器不能接受參数.所以执行触发器就叫做触发或点火.Oracle事件指的是数据库的 ...