用户在站内注册并登录你的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后台顶部添加错误提醒信息或升级提醒信息》,那么你应该可以比较容易看明白本文的代码了。
来源:
https://www.wpdaxue.com/extra-user-profile-fields-2.html