对倡萌童鞋《WordPress 个人资料添加额外的字段》的补充

现实情况远非想的那么单纯容易清晰:当优越感逐渐转为失落感甚至挫败感时,当由坚信自己是一块金子到怀疑自己是一粒沙子时,愤怒,迷茫,自卑,焦急,躁动就开始与日俱增。

用户在站内注册并登录你的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 个人资料添加额外的字段》的补充到此结束。坚强另一个名字叫硬撑小编再次感谢大家对我们的支持!

标签: 童鞋 WordPress