Advertisement
  1. Code
  2. Creative Coding

Roles y capacidades de WordPress: un ejemplo de la vida real

Scroll to top
Read Time: 18 min

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Este es un tutorial de una serie formada por cuatro partes que cubre el tema de los usuarios, los roles y las capacidades de WordPress. La serie cubrirá la arquitectura y el diseño de los roles de usuario en WordPress; resaltará las funciones más importantes para interactuar con los usuarios y administrar roles y capacidades; y en el último tutorial, crearemos un ejemplo de la vida real que demuestra la utilidad de esta API.


Introducción

Este tutorial se centrará en la creación de una solución práctica utilizando el sistema de roles y capacidades de WordPress. Si te has perdido los dos últimos tutoriales, te sugiero encarecidamente que los revises. La primera parte "Roles y capacidades de WordPress: Lo básico" explica el diseño de este sistema; mientras que la segunda parte "Roles y capacidades de WordPress: Funciones de nota" se centra en las funciones y clases que WordPress ofrece para interactuar con el sistema.

La solución propuesta en este tutorial es la misma que estoy usando para uno de mis plugins prémium de WordPress. Lo he elegido después de probar diferentes enfoques. Es simple, breve y está encapsulado en una clase. Puedes adaptarlo fácilmente a tu propio plugin. El código está disponible en GitHub; y no tiene licencia. También viene sin garantías, y eres libre de usarlo y licenciarlo como desees.


Paso 1 El escenario

Estamos construyendo un plugin de WordPress que tiene un panel de administración especial para el cliente. Este panel de administración solo debe ser accesible para un conjunto limitado de usuarios. Estos usuarios pueden ser seleccionados por el administrador del blog. Puedes habilitar diferentes roles, usuarios o todos ellos para acceder al panel de administración o características del cliente.

Aparte de eso, necesitamos tener un acceso restringido a la Biblioteca de medios para los usuarios con acceso al Panel de cliente. WordPress tiene una capacidad especial para acceder y cargar archivos a la Biblioteca de medios: "upload_files". Sin embargo, esto proporciona al usuario (o rol) acceso completo a la Biblioteca de medios. Esto no es algo bueno, especialmente porque las fotos (o archivos) no se pueden jerarquizar en diferentes categorías de manera que puedas restringir el acceso a cada una de ellas.

Necesitamos restringir el acceso a la Biblioteca de medios solo a los archivos que el usuario haya cargado. Este no debería tener acceso a los archivos cargados por otros usuarios. Esta restricción solo debe aplicarse a los usuarios que no tengan la capacidad "upload_files". A otros usuarios y roles no les afectará esta restricción, ya que ya tienen acceso completo a la Biblioteca de medios.

Nuestro blog tendrá estas cuatro categorías de usuarios:

Los dos primeros conjuntos de usuarios son los que no tendrán acceso al panel de cliente del plugin. He destacado el hecho de que hay usuarios que tienen acceso a la Biblioteca de medios, y un conjunto que no lo hace. Es esencial que nuestra solución no afecte a las dos primeras categorías y deje sus capacidades intactas.

Con eso en mente, nuestra clase debe hacer dos cosas:

  • Establecer los permisos adecuados para el tercer y cuarto conjunto de usuarios
  • Habilitar un acceso restringido a la biblioteca de medios a la cuarta categoría. Debe asegurarse de que después de deshabilitar el plugin o cambiar los derechos de los usuarios, esta categoría de usuarios recupere sus permisos originales.

Paso 2 La interfaz del plugin

Antes de crear nuestra clase, tengamos una idea más profunda sobre el plugin. El plugin tiene una estructura bastante simple. Se compone de dos menús diferentes: Uno para el administrador y sirve como panel administrativo, accesible solo para usuarios con una capacidad "manage_options". El segundo menú es para clientes y da acceso al Panel de cliente. Este panel requiere una capacidad "wptuts_client_page".

Esta capacidad no existe en WordPress; necesitamos añadirla y asignarla a los usuarios o roles especificados. Pero antes de eso, echemos un vistazo al plugin.

1
/*

2
  Plugin Name: WordPress Roles Plugin

3
  Plugin URI: https://github.com/omarabid/WordPress-Roles-Plugin

4
  Description: A WordPress Roles Plugin

5
  Author: Abid Omar

6
  Author URI: https://omarabid.com

7
  Version: 1.0

8
 */
9
10
// Add an Admin user menu to the WordPress Dashboard

11
add_action('admin_menu', 'wptuts_admin_menu');
12
function wptuts_admin_menu() {
13
	add_menu_page('Admin Access', 'Admin Access', 'manage_options', 'wptuts-admin', 'wptuts_admin_page');
14
}
15
16
function wptuts_admin_page() {
17
	echo 'Admin Page';
18
}
19
20
// Add a client user menu to the WordPress Dashboard

21
add_action('admin_menu', 'wptuts_client_menu');
22
function wptuts_client_menu() {
23
	add_menu_page('Client Access', 'Client Access', 'wptuts_client', 'wptuts-client', 'wptuts_client_page');
24
}
25
26
function wptuts_client_page() {
27
	echo 'Client Page';
28
}

Tenemos dos ganchos de acción "admin_menu" que agregan el menú Administrador tanto para el administrador como para el cliente. Podemos acortarlo a un solo gancho que añada ambos; pero prefiero separarlos. Cada función "add_menu_page" se engancha a otra función que mostrará el contenido de la página.

A continuación, necesitamos inicializar nuestra clase Roles. El código de clase se coloca en otro archivo; y el proceso de inicialización se realiza durante el gancho "init" que se asegura de que WordPress se haya terminado de cargar.

La función constructora acepta tres parámetros:

  • $all Booleano (opcional) Si deseas dar acceso de cliente a todos los usuarios del blog, puedes establecerlo en true e ignorar los parámetros restantes.
  • $roles Matriz (opcional) Una matriz con los identificadores de los roles que tendrán acceso al panel cliente.
  • $users Matriz (opcional) Una matriz con los nombres de usuario de los usuarios que tendrán acceso al panel del cliente.
1
// Loads and initialize the roles class

2
add_action('init', 'wptuts_start_plugin');
3
function wptuts_start_plugin() {
4
	require_once('roles_class.php');
5
	$all = false;
6
	$roles = array('subscriber');
7
	$users = array(3);
8
	new wpttuts_roles($all, $roles, $users);
9
}

Paso 3 La clase roles

Las propiedades

La clase solo tiene 3 propiedades: $all, $roles y $users. Estas son las mismas variables que se pasan a la función constructora. El valor de las variables no se cambia en nuestro ejemplo; pero en un caso práctico real, es posible que desees fusionarlas con otra fuente. Para ello, tienes la función set_entities. Puedes acomodarlo según tus propias necesidades.

1
/**

2
 * @var boolean

3
 */
4
private $all;
5
6
/**

7
 * @var array

8
 */
9
private $roles;
10
11
/**

12
 * @var array

13
 */
14
private $users;
15
16
/**

17
 * Set the permission entities

18
 *

19
 * @param boolean $all

20
 * @param array $roles

21
 * @param array $users

22
 */
23
private function set_entities($all, $roles, $users) {
24
	$this->all = $all;
25
	$this->roles = $roles;
26
	$this->users = $users;
27
}

La función constructora

En un primer paso, la función constructora inicializa las variables $all, $roles y $users mediante la función set_entitites(). A continuación, llama a una función privada para establecer las capacidades y otra para la restricción de la Biblioteca de medios. Estos son exactamente los pasos que hemos definido en nuestro escenario.

1
/**

2
 * Creates a new instance of the Roles Class

3
 *

4
 * @param boolean $all

5
 * @param array $roles

6
 * @param array $users

7
 */
8
function __construct($all = false, $roles = array(), $users = array()) {
9
	// Set the allowed entities

10
	$this->set_entities($all, $roles, $users);
11
12
	// Set the user access permission

13
	$this->set_permissions();
14
15
	// Media Library Filter

16
	$this->media_filter();
17
}

Funciones estáticas

Las funciones estáticas no requieren inicialización de clase. Son similares a las funciones independientes, simplemente se vinculan a la clase especificada. He decidido mantener algunas funciones estáticas porque así se pueden utilizar de forma independiente; y es posible que las encuentre útiles en otro contexto.

Estas funciones son filter_roles() y filter_users(); que están asociadas con otras dos funciones role_has_caps() y user_has_caps(). Las funciones desempeñan el papel de un filtro. Filtran roles (o usuarios) en función de las capacidades que tengan y no tengan.

Ambas funciones aceptan dos argumentos:

  • $include Matriz Una matriz de las capacidades que tiene el rol.
  • $exclude Matriz Una matriz de capacidades que el rol no tiene.
1
/**

2
 * Filter all roles of the blog based on capabilities

3
 *

4
 * @static

5
 * @param array $include Array of capabilities to include

6
 * @param array $exclude Array of capabilities to exclude

7
 * @return array

8
 */
9
static function filter_roles($include, $exclude) {
10
	$filtered_roles = array();
11
	global $wp_roles;
12
	$roles = $wp_roles->get_names();
13
	foreach ($roles as $role_id => $role_name) {
14
		$role = get_role($role_id);
15
		if (self::role_has_caps($role, $include) && !self::role_has_caps($role, $exclude)) {
16
			$filtered_roles[] = $role_id;
17
		}
18
	}
19
	return $filtered_roles;
20
}
21
22
/**

23
 * Filter all users of the blog based on capabilities

24
 *

25
 * @static

26
 * @param array $include Array of capabilities to include

27
 * @param array $exclude Array of capabilities to exclude

28
 * @return array

29
 */
30
static function filter_users($include, $exclude) {
31
	$filtered_users = array();
32
	$users = get_users();
33
	foreach ($users as $user) {
34
		$user = new WP_User($user->ID);
35
		if (self::user_has_caps($user, $include) && !self::user_has_caps($user, $exclude)) {
36
			$filtered_users[] = $user->ID;
37
		}
38
	}
39
	return $filtered_users;
40
}

Las funciones recorren todos los roles y usuarios de la base de datos. Para cada rol (o usuario), comprueba si tiene las capacidades necesarias y si no tiene capacidades que excluir. Esta comprobación se realiza con las funciones role_has_caps() y user_has_caps().

Estas dos funciones (role_has_caps() y user_has_caps()) aceptan dos argumentos:

  • $role (o $user) Cadena El identificador del rol o el ID de usuario.
  • $caps Matriz Una serie de capacidades a comprobar.

Si el rol (o usuario) tiene las capacidades especificadas en la matriz $caps, la función devuelve true. En otro caso, la función devuelve false. La función básicamente recorre cada capacidad y comprueba si el rol (o usuario) tiene la capacidad especificada.

1
/**

2
 * Returns true if a role has the capabilities in the passed array

3
 *

4
 * @static

5
 * @param $role

6
 * @param $caps

7
 * @return bool

8
 */
9
static function role_has_caps($role, $caps) {
10
	foreach ($caps as $cap) {
11
		if (!$role->has_cap($cap)) {
12
			return false;
13
		}
14
	}
15
	return true;
16
}
17
18
/**

19
 * Returns true if a user has the capabilities in the passed array

20
 *

21
 * @static

22
 * @param $user

23
 * @param $caps

24
 * @return bool

25
 */
26
static function user_has_caps($user, $caps) {
27
	foreach ($caps as $cap) {
28
		if (!$user->has_cap($cap)) {
29
			return false;
30
		}
31
	}
32
	return true;
33
}

Adición de permisos

Este es el primer paso para imponer la ley de nuestro plugin. He distribuido la funcionalidad en 3 funciones: una para establecer permisos para todos los usuarios, otra para establecer permisos en los roles y otra para establecer permisos para los usuarios especificados. La función principal simplemente decide qué funciones llamar.

1
/**

2
 * Set the Menu and Pages access permissions

3
 */
4
private function set_permissions() {
5
	$this->set_all_permissions();
6
	if (!$this->all) {
7
		$this->set_roles_permissions();
8
		$this->set_users_permissions();
9
	}
10
}

La función set_all_permissions() recorre todos los usuarios del blog y añade (o elimina) la capacidad "wptuts_client" en función del valor de la variable $all. Obtenemos la lista completa de usuarios que utilizan la función get_users(); e inicializa un nuevo objeto WP_User para obtener acceso a las funciones add_cap() y remove_cap().

1
/**

2
 * Set the permissions for ALL users

3
 */
4
private function set_all_permissions() {
5
	$users = get_users();
6
	foreach ($users as $user) {
7
		$user = new WP_User($user->ID);
8
		if ($this->all) {
9
			$user->add_cap('wptuts_client');
10
		}
11
		else {
12
			$user->remove_cap('wptuts_client');
13
		}
14
	}
15
}

La función set_roles_permissions() recorre todos los roles del blog y elimina la capacidad "wptuts_client". Después de eso, recorre los roles de la matriz $roles y añade la capacidad "wptuts_client". El primer paso fue asegurarnos de limpiar la capacidad de los roles que pudieron haberla tenido anteriormente.

1
/**

2
 * Set the permissions for Roles

3
 */
4
private function set_roles_permissions() {
5
	global $wp_roles;
6
	$roles = $wp_roles->get_names();
7
	foreach ($roles as $role_id => $role_name) {
8
		$role = get_role($role_id);
9
		$role->remove_cap('wptuts_client');
10
	}
11
	if (!empty($this->roles)) {
12
		foreach ($this->roles as $role_id) {
13
			$role = get_role($role_id);
14
			$role->add_cap('wptuts_client');
15
		}
16
	}
17
}

La función set_users_permissions() hace lo mismo que la última función. La única diferencia es que se dirige a los usuarios en lugar de a los roles.

1
/**

2
 * Set the permissions for specific Users

3
 */
4
private function set_users_permissions() {
5
	$users = get_users();
6
	foreach ($users as $user) {
7
		$user = new WP_User($user->ID);
8
		$user->remove_cap('wptuts_client');
9
	}
10
	if (!empty($this->users)) {
11
		foreach ($this->users as $user_id) {
12
			$user = new WP_User($user_id);
13
			$user->add_cap('wptuts_client');
14
		}
15
	}
16
}

Filtro de Biblioteca de medios

Ahora hemos establecido los permisos adecuados para las entidades adecuadas. (Sea usuario o rol) También tenemos que restringir el acceso a la Biblioteca de medios para la cuarta categoría que distinguimos en el escenario.

Esta categoría de roles (o usuarios) tiene la capacidad "wptuts_client", pero no tiene la capacidad "upload_files". Y ahí es donde entran en juego nuestras funciones de filtro. Nos ayudarán a filtrar y devolver esta categoría de roles (o usuarios).

Para esta categoría, añadiremos dos capacidades "upload_files" y "remove_upload_files". "upload_files" dará acceso completo a la Biblioteca de medios; y la otra capacidad se usará para filtrar las entradas de la Biblioteca de medios, y también se usará para quitar la capacidad de "upload_files" una vez que también se haya eliminado la capacidad "wptuts_client".

1
/**

2
 * Restrict Media Access

3
 */
4
private function media_filter() {
5
	// Apply the media filter for current Clients

6
	$roles = self::filter_roles(array('wptuts_client'), array('upload_files'));
7
	$users = self::filter_users(array('wptuts_client'), array('upload_files'));
8
	$this->roles_add_cap($roles, 'upload_files');
9
	$this->roles_add_cap($roles, 'remove_upload_files');
10
	$this->users_add_cap($users, 'upload_files');
11
	$this->users_add_cap($users, 'remove_upload_files');
12
13
	// Restrict Media Library access

14
	add_filter('parse_query', array(&$this, 'restrict_media_library'));
15
16
	// For cleaning purposes

17
	$clean_roles = self::filter_roles(array('remove_upload_files'), array('wptuts_client'));
18
	$clean_users = self::filter_users(array('remove_upload_files'), array('wptuts_client'));
19
	$this->roles_remove_cap($clean_roles, 'upload_files');
20
	$this->roles_remove_cap($clean_roles, 'remove_upload_files');
21
	$this->users_remove_cap($clean_users, 'upload_files');
22
	$this->users_remove_cap($clean_users, 'remove_upload_files');
23
}

Después de establecer las capacidades en esta categoría, enganchamos al filtro "parse_query". Este filtro nos permite cambiar las entradas devueltas por WP_Query. En nuestro caso, vamos a establecer la variable de la consulta "autor". Esto da como resultado la devolución de solo las entradas creadas por el autor especificado.

1
/**

2
 * Restrict Media Library access

3
 *

4
 * @param $wp_query

5
 */
6
public function restrict_media_library($wp_query) {
7
	if (strpos($_SERVER['REQUEST_URI'], '/wp-admin/upload.php')) {
8
		if (current_user_can('remove_upload_files')) {
9
			global $current_user;
10
			$wp_query->set('author', $current_user->ID);
11
		}
12
	}
13
	else if (strpos($_SERVER['REQUEST_URI'], '/wp-admin/media-upload.php')) {
14
		if (current_user_can('remove_upload_files')) {
15
			global $current_user;
16
			$wp_query->set('author', $current_user->ID);
17
		}
18
	}
19
}

El código completo

1
if (!class_exists('wpttuts_roles')) {
2
	class wpttuts_roles {
3
		/**

4
		 * Determines if all users will have the required permissions

5
		 *

6
		 * @var boolean

7
		 */
8
		private $all;
9
10
		/**

11
		 * An array with the roles which have the required permissions

12
		 *

13
		 * @var array

14
		 */
15
		private $roles;
16
17
		/**

18
		 * An array with the user names which have the required permissions

19
		 *

20
		 * @var array

21
		 */
22
		private $users;
23
24
		/**

25
		 * Creates a new instance of the Roles Class 

26
		 *

27
		 * @param boolean $all

28
		 * @param array $roles

29
		 * @param array $users

30
		 */
31
		function __construct($all = false, $roles = array(), $users = array()) {
32
			// Set the allowed entities

33
			$this->set_entities($all, $roles, $users);
34
35
			// Set the user access permission

36
			$this->set_permissions();
37
38
			// Media Library Filter

39
			$this->media_filter();
40
		}
41
42
		/**

43
		 * Set the permission entities

44
		 *

45
		 * @param boolean $all

46
		 * @param array $roles

47
		 * @param array $users

48
		 */
49
		private function set_entities($all, $roles, $users) {
50
			$this->all = $all;
51
			$this->roles = $roles;
52
			$this->users = $users;
53
		}
54
55
		/**

56
		 * Set the Menu and Pages access permissions

57
		 */
58
		private function set_permissions() {
59
			$this->set_all_permissions();
60
			if (!$this->all) {
61
				$this->set_roles_permissions();
62
				$this->set_users_permissions();
63
			}
64
		}
65
66
		/**

67
		 * Set the permissions for ALL users

68
		 */
69
		private function set_all_permissions() {
70
			$users = get_users();
71
			foreach ($users as $user) {
72
				$user = new WP_User($user->ID);
73
				if ($this->all) {
74
					$user->add_cap('wptuts_client');
75
				}
76
				else {
77
					$user->remove_cap('wptuts_client');
78
				}
79
			}
80
		}
81
82
		/**

83
		 * Set the permissions for Roles

84
		 */
85
		private function set_roles_permissions() {
86
			global $wp_roles;
87
			$roles = $wp_roles->get_names();
88
			foreach ($roles as $role_id => $role_name) {
89
				$role = get_role($role_id);
90
				$role->remove_cap('wptuts_client');
91
			}
92
			if (!empty($this->roles)) {
93
				foreach ($this->roles as $role_id) {
94
					$role = get_role($role_id);
95
					$role->add_cap('wptuts_client');
96
				}
97
			}
98
		}
99
100
		/**

101
		 * Set the permissions for specific Users

102
		 */
103
		private function set_users_permissions() {
104
			$users = get_users();
105
			foreach ($users as $user) {
106
				$user = new WP_User($user->ID);
107
				$user->remove_cap('wptuts_client');
108
			}
109
			if (!empty($this->users)) {
110
				foreach ($this->users as $user_id) {
111
					$user = new WP_User($user_id);
112
					$user->add_cap('wptuts_client');
113
				}
114
			}
115
		}
116
117
		/**

118
		 * Restrict Media Access

119
		 */
120
		private function media_filter() {
121
			// Apply the media filter for currenct AdPress Clients

122
			$roles = self::filter_roles(array('wptuts_client'), array('upload_files'));
123
			$users = self::filter_users(array('wptuts_client'), array('upload_files'));
124
			$this->roles_add_cap($roles, 'upload_files');
125
			$this->roles_add_cap($roles, 'remove_upload_files');
126
			$this->users_add_cap($users, 'upload_files');
127
			$this->users_add_cap($users, 'remove_upload_files');
128
129
			// Restrict Media Library access

130
			add_filter('parse_query', array(&$this, 'restrict_media_library'));
131
132
			// For cleaning purposes

133
			$clean_roles = self::filter_roles(array('remove_upload_files'), array('wptuts_client'));
134
			$clean_users = self::filter_users(array('remove_upload_files'), array('wptuts_client'));
135
			$this->roles_remove_cap($clean_roles, 'upload_files');
136
			$this->roles_remove_cap($clean_roles, 'remove_upload_files');
137
			$this->users_remove_cap($clean_users, 'upload_files');
138
			$this->users_remove_cap($clean_users, 'remove_upload_files');
139
		}
140
141
		/**

142
		 * Add a capability to an Array of roles

143
		 *

144
		 * @param $roles

145
		 * @param $cap

146
		 */
147
		private function roles_add_cap($roles, $cap) {
148
			foreach ($roles as $role) {
149
				$role = get_role($role);
150
				$role->add_cap($cap);
151
			}
152
		}
153
154
		/**

155
		 * Add a capability to an Array of users

156
		 *

157
		 * @param $users

158
		 * @param $cap

159
		 */
160
		private function users_add_cap($users, $cap) {
161
			foreach ($users as $user) {
162
				$user = new WP_User($user);
163
				$user->add_cap($cap);
164
			}
165
		}
166
167
		/**

168
		 * Remove a capability from an Array of roles

169
		 *

170
		 * @param $roles

171
		 * @param $cap

172
		 */
173
		private function roles_remove_cap($roles, $cap) {
174
			foreach ($roles as $role) {
175
				$role = get_role($role);
176
				$role->remove_cap($cap);
177
			}
178
		}
179
180
		/**

181
		 * Remove a capability from an Array of users

182
		 *

183
		 * @param $users

184
		 * @param $cap

185
		 */
186
		private function users_remove_cap($users, $cap) {
187
			foreach ($users as $user) {
188
				$user = new WP_User($user);
189
				$user->remove_cap($cap);
190
			}
191
		}
192
193
		/**

194
		 * Filter all roles of the blog based on capabilities

195
		 *

196
		 * @static

197
		 * @param array $include Array of capabilities to include

198
		 * @param array $exclude Array of capabilities to exclude

199
		 * @return array

200
		 */
201
		static function filter_roles($include, $exclude) {
202
			$filtered_roles = array();
203
			global $wp_roles;
204
			$roles = $wp_roles->get_names();
205
			foreach ($roles as $role_id => $role_name) {
206
				$role = get_role($role_id);
207
				if (self::role_has_caps($role, $include) && !self::role_has_caps($role, $exclude)) {
208
					$filtered_roles[] = $role_id;
209
				}
210
			}
211
			return $filtered_roles;
212
		}
213
214
		/**

215
		 * Returns true if a role has the capabilities in the passed array

216
		 *

217
		 * @static

218
		 * @param $role

219
		 * @param $caps

220
		 * @return bool

221
		 */
222
		static function role_has_caps($role, $caps) {
223
			foreach ($caps as $cap) {
224
				if (!$role->has_cap($cap)) {
225
					return false;
226
				}
227
			}
228
			return true;
229
		}
230
231
		/**

232
		 * Filter all users of the blog based on capabilities

233
		 *

234
		 * @static

235
		 * @param array $include Array of capabilities to include

236
		 * @param array $exclude Array of capabilities to exclude

237
		 * @return array

238
		 */
239
		static function filter_users($include, $exclude) {
240
			$filtered_users = array();
241
			$users = get_users();
242
			foreach ($users as $user) {
243
				$user = new WP_User($user->ID);
244
				if (self::user_has_caps($user, $include) && !self::user_has_caps($user, $exclude)) {
245
					$filtered_users[] = $user->ID;
246
				}
247
			}
248
			return $filtered_users;
249
		}
250
251
		/**

252
		 * Returns true if a user has the capabilities in the passed array

253
		 *

254
		 * @static

255
		 * @param $user

256
		 * @param $caps

257
		 * @return bool

258
		 */
259
		static function user_has_caps($user, $caps) {
260
			foreach ($caps as $cap) {
261
				if (!$user->has_cap($cap)) {
262
					return false;
263
				}
264
			}
265
			return true;
266
		}
267
268
		/**

269
		 * Restrict Media Library access

270
		 *

271
		 * @param $wp_query

272
		 */
273
		public function restrict_media_library($wp_query) {
274
			if (strpos($_SERVER['REQUEST_URI'], '/wp-admin/upload.php')) {
275
				if (current_user_can('remove_upload_files')) {
276
					global $current_user;
277
					$wp_query->set('author', $current_user->ID);
278
				}
279
			}
280
			else if (strpos($_SERVER['REQUEST_URI'], '/wp-admin/media-upload.php')) {
281
				if (current_user_can('remove_upload_files')) {
282
					global $current_user;
283
					$wp_query->set('author', $current_user->ID);
284
				}
285
			}
286
		}
287
288
	}
289
}

Conclusión

En este tutorial, traté de usar el material que aprendimos en los dos tutoriales anteriores para crear una solución personalizada para los roles y las capacidades. La solución se encapsula en una clase que se puede personalizar para tus propias necesidades o plugins. Puedes encontrar el código en Github.

Si tienes alguna pregunta, sugerencia o sugerencia de mejora, no dudes en publicarlo en los comentarios.

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.