用户在站内注册并登录你的Wordpress网站后,如果他可以来到后台,不管他是什么角色(role),都会在后台左侧菜单看到“我的个人资料”这个菜单项,点击后,可以进入该页面。
WP大学的倡萌童鞋写了一篇文章:《WordPress 个人资料添加额外的字段》,我是搜索特定关键词edit_user_profile+show_user_profile找到这个页面的,我就就一个自己插件的限定条件免费组件写一篇小文章,算是对这篇文章的扩展吧!
任何通过WordpressAPI实现的数据存取,都应该考虑
- 如何存?
- 如何取?
- 取出数据后如何显示?
这三个问题,你可能觉得我说的有点儿啰嗦,好吧,不啰嗦了,直接上代码:
<?php
/*
Plugin Name: Coolwp ALP add-on for user profile
Plugin URI: http://suoling.net/access-level-pro/
Description:This is an add-on of ALP(Access Level Pro),more info:<a href="http://suoling.net/access-level-pro/" title="Access Level Pro">Click HERE!</a>
Version: 1.0.0
Author: Suifengtec
Author URI: http://suoling.net/
Text Domain: cwpalp
License: http://suoling.net/licenses
*/
function coolwp_alp_for_user_profile_page( $user ) {
/*
判断所需的父插件是否存在,判断依据是父插件中的一个函数是否存在,如果存在,就怎么着...
*/
if(function_exists('sl_get_subscription_id')){
$user_ID = get_current_user_id();
/*
获取当前用户ID,然后判断该用户是否处在付费订阅有效期内,如果是,那么就怎么着...
*/
if(sl_is_active( $user_ID ) && sl_is_paid_user($user_ID)){
$cwp_alp_has_actived ='是';
//获取某用户的订阅等级ID
$cwp_alp_user_level = sl_get_subscription_id( $user_ID );
//获取该用户订阅等级信息
$cwp_get_level_info=sl_get_subscription_details( absint($cwp_alp_user_level ));
//该用户订阅等级名称
$cwp_alp_user_level_name =$cwp_get_level_info->name;
//该用户订阅等级描述
$cwp_alp_user_level_des =$cwp_get_level_info->description ;
//该用户订阅等级周期的数字部分
$cwp_alp_user_level_duration_num =$cwp_get_level_info->duration ;
//该用户订阅等级周期的单位部分
$cwp_alp_user_level_duration_unit =$cwp_get_level_info->duration_unit;
//该用户订阅等级是否激活
$cwp_alp_user_level_status =$cwp_get_level_info->status;
$cwp_alp_user_access_level=sl_get_subscription_access_level($cwp_alp_user_level);
$cwp_alp_user_expiration = get_user_meta( $user_ID, 'sl_expiration', true );
$cwp_alp_user_level_output= __('订阅等级:', 'cwpalp').'<span style="color:green"> '.$cwp_alp_user_level_des.'</span> ,'.__('权限等级为:', 'cwpalp').' <span style="color:green">'.$cwp_alp_user_access_level.'</span>; '.__('时长:', 'cwpalp').':<span style="color:green">'.$cwp_alp_user_level_duration_num.__($cwp_alp_user_level_duration_unit,'cwpalp').'</span> . ';
$tr_css='alp-ok';
/*
如果当前用户不出在有效的付费订阅期内,那么,就怎么着...
*/
}else{
$cwp_alp_has_actived ='<span class="alp-error">否</span>';
$cwp_alp_user_level_name ='<span class="alp-error">未激活或者已过期!</span>';
$cwp_alp_user_expiration=$cwp_alp_user_level_name;
$cwp_alp_user_level_output=$cwp_alp_user_level_name;
$tr_css='alp-error';
}
?>
<!--
直接将CSS写在这里了,就不单独建个文件enqueue了,算是减少一个http请求吧。
-->
<style>
.cwp-alp-data{
background:#59524C;
padding:10px;
padding-left:10px;
border-radius: 5px;
font-family: "Microsoft Yahei",sans-serif;
}
.cwp-alp-data label{
padding-left:10px;
color:#fff;
}
h3.alp-user-profile-heading{
color:#59524C;
text-align:center;
}
td.alp-ok,td.alp-error{
float:left;
margin: 5px 0 15px;
border: 0;
padding: 1px 12px;
background-color: #fff;
-webkit-box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
box-shadow: 0 1px 1px 0 rgba(0,0,0,.1);
}
td.alp-ok{
border-left: 4px solid #7ad03a;
}
td.alp-error{
border-left: 4px solid #D64E07;
}
span.alp-error{
color:#D64E07;
}
td.alp-ok p, td.alp-error p {
margin: .5em 0;
padding: 2px;
}
</style>
<!--HTML结构开始-->
<h3 class="alp-user-profile-heading"><?php _e('订阅信息', 'cwpalp'); ?></h3>
<table class="form-table cwp-alp-data">
<tr>
<th><label><?php _e('订阅账户是否激活?', 'cwpalp'); ?></label></th>
<td class="<?php echo $tr_css ?>"><p><?php echo $cwp_alp_has_actived; ?></p></td>
</tr>
<tr>
<th>
<label><?php _e('订阅等级', 'cwpalp'); ?></label>
</th>
<td class="<?php echo $tr_css ?>">
<p><?php echo $cwp_alp_user_level_name; ?></p>
</td>
</tr>
<tr>
<th>
<label><?php _e('订阅等级描述', 'cwpalp'); ?></label>
</th>
<td class="<?php echo $tr_css ?>">
<p><?php echo $cwp_alp_user_level_output; ?></p>
</td>
</tr>
<tr>
<th>
<label><?php _e('订阅有效期截至', 'cwpalp'); ?>
</label></th>
<td class="<?php echo $tr_css ?>">
<p><?php echo $cwp_alp_user_expiration; ?></p>
</td>
</tr>
</table>
<!--//HTML结构结束-->
<?php }else{
return ;
}
}
add_action( 'show_user_profile', 'coolwp_alp_for_user_profile_page' );
add_action( 'edit_user_profile', 'coolwp_alp_for_user_profile_page' );
/*
///这个被我注释掉的代码段是演示如何存储内容的,如果你觉得需要,请自行添加相应数据库字段。
function coolwp_alp_for_user_profile_page_save( $user_id ) {
if ( !current_user_can( 'edit_user', $user_id ) )
return FALSE;
update_usermeta( $user_id, 'address', $_POST['address'] );
}
add_action( 'personal_options_update', 'coolwp_alp_for_user_profile_page_save' );
add_action( 'edit_user_profile_update', 'coolwp_alp_for_user_profile_page_save' );
*/
/*
Show notification if ALP(Access Level Pro) is not installed
父插件不存在时,在Wordpress上方显示一个错误信息。
*/
if (!function_exists('sl_get_subscription_id')) {
add_action( 'admin_notices', 'cwpalp_un_check', 5 );
add_action( 'network_admin_notices', 'cwpalp_un_check', 5 );
function cwpalp_un_check() {
echo '<div class="update-nag" ><p>' . __('Coolwp ALP plugin for user profile is an add-on for ALP(Access Level Pro),You need to install<a style="text-decoration: none;" href="http://suoling.net/access-level-pro/" title="More info about ALP »">Access Level Pro</a> to use this add-on. <a style="text-decoration: none;" href="http://suoling.net/coolwp-alp-plugin-for-user-profile/">More info »</a>', 'cwpalp') . '</p></div>';
}
}
你也可以在这里下载代码包,文件的PHP中已经写上注释了。
这个插件中演示了如何在”我的个人资料”页面添加自定义的HTML元素。实际截图如下:
1.当未安装父插件时,在页面上方提示:
2.当当前用户具有某种付费订阅权限/等级的时候,在“我的个人资料”页面显示:
3.当当前用户没有任何付费订阅权限/等级的时候,在“我的个人资料”页面显示:
倡萌注:如果你之前看过 《WordPress 个人资料添加额外的字段》和 《如何在WordPress后台顶部添加错误提醒信息或升级提醒信息》,那么你应该可以比较容易看明白本文的代码了。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
貌似我截错了
截图的确错了,希望能提交正确的图片给我
好的
已发站内信
暂时还用不上。