用户在站内注册并登录你的Wordpress网站后,如果他可以来到后台,不管他是什么角色(role),都会在后台左侧菜单看到“我的个人资料”这个菜单项,点击后,可以进入该页面。
WP大学的倡萌童鞋写了一篇文章:《WordPress 个人资料添加额外的字段》,我是搜索特定关键词edit_user_profile+show_user_profile找到这个页面的,我就就一个自己插件的限定条件免费组件写一篇小文章,算是对这篇文章的扩展吧!
任何通过WordpressAPI实现的数据存取,都应该考虑
- 如何存?
- 如何取?
- 取出数据后如何显示?
这三个问题,你可能觉得我说的有点儿啰嗦,好吧,不啰嗦了,直接上代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | <?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 rel="nofollow noopener noreferrer" 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;" rel="nofollow noopener noreferrer" 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;" rel="nofollow noopener noreferrer" href="http://suoling.net/coolwp-alp-plugin-for-user-profile/">More info »</a>', 'cwpalp') . '</p></div>'; } } |
<?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 rel="nofollow noopener noreferrer" 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;" rel="nofollow noopener noreferrer" 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;" rel="nofollow noopener noreferrer" href="http://suoling.net/coolwp-alp-plugin-for-user-profile/">More info »</a>', 'cwpalp') . '</p></div>'; } }
你也可以在这里下载代码包,文件的PHP中已经写上注释了。
这个插件中演示了如何在"我的个人资料"页面添加自定义的HTML元素。实际截图如下:
1.当未安装父插件时,在页面上方提示:
2.当当前用户具有某种付费订阅权限/等级的时候,在“我的个人资料”页面显示:
3.当当前用户没有任何付费订阅权限/等级的时候,在“我的个人资料”页面显示:
倡萌注:如果你之前看过 《WordPress 个人资料添加额外的字段》和 《如何在WordPress后台顶部添加错误提醒信息或升级提醒信息》,那么你应该可以比较容易看明白本文的代码了。
本文对倡萌童鞋《WordPress 个人资料添加额外的字段》的补充到此结束。坚强另一个名字叫硬撑小编再次感谢大家对我们的支持!