1. Code
  2. WordPress
  3. Plugin Development

Cómo crear un plugin de administración de avatares de WordPress desde cero: Introducción

Scroll to top
This post is part of a series called How to Create a WordPress Avatar Management Plugin from Scratch.
How to Create a WordPress Avatar Management Plugin: Finishing Touches

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

Avatar Manager para WordPress es un plugin sencillo y agradable que facilita el almacenamiento local de avatares y mucho más.

Mejora tu sitio web WordPress permitiendo que tus usuarios elijan entre usar Gravatar o una imagen de avatar autoalojada desde la página de su perfil directamente. Flujo de trabajo mejorado, generación de imágenes a petición y permisos de usuario personalizados en una interfaz nativa. Dá la bienvenida al plugin Avatar Manager.


Introducción

Un plugin de WordPress es una aplicación PHP que añade un conjunto específico de características o servicios a WordPress, que pueden integrarse perfectamente con WordPress utilizando puntos de acceso y métodos proporcionados por la API de plugins de WordPress.

Este artículo te guiará a través del proceso de creación de tu propio plugin de WordPress desde cero.

Nota: En este artículo se supone que ya estás familiarizado con la funcionalidad básica de WordPress y la programación PHP.


Paso 1. Configurar el espacio de trabajo

Para empezar, navega a wp-content/plugins/ en tu instalación de WordPress. Para configurar el espacio de trabajo, comienza creando la siguiente estructura de directorios y archivos vacíos como se ejemplifica en la siguiente imagen:

Workspace structure of the Avatar Manager plugin
Estructura del espacio de trabajo para el plugin Avatar Manager

Asegúrate de elegir un nombre único para el directorio del plugin y para el archivo PHP principal, como avatar-manager y avatar-manager.php en este ejemplo, y pon todos los archivos del plugin dentro de ese directorio.

El silencio es oro

Antes de empezar a escribir nuestro plugin, abre avatar-manager/index.php y añade el siguiente código:

1
<?php
2
// Silence is golden.

3
?>

Puedes ver este archivo en muchos lugares de WordPress. Es un simple truco utilizado para evitar la navegación por directorios.


Paso 2. Crear un plugin básico de WordPress

Ahora, es el momento de poner algo de información en nuestro archivo PHP principal del plugin.

Información estándar del plugin

La parte superior del archivo PHP principal del plugin debe contener un encabezado con información estándar del plugin. Este encabezado permite a WordPress reconocer la existencia del plugin, añadirlo a la pantalla de administración de plugins para que pueda ser activado, y cargado, así como para ejecutar sus funciones; sin el encabezado, el plugin nunca se activaría ni ejecutaría.

Abre avatar-manager/avatar-manager.php y añade las siguientes líneas:

1
<?php
2
/**

3
 * @package Avatar_Manager

4
 */
5
/*

6
Plugin Name: Avatar Manager

7
Plugin URI: http://wordpress.org/extend/plugins/avatar-manager/

8
Description: Avatar Manager for WordPress is a sweet and simple plugin for storing avatars locally and more. Easily.

9
Version: 1.0.0

10
Author: Cătălin Dogaru

11
Author URI: http://profiles.wordpress.org/cdog/

12
License: GPLv2 or later

13
*/
14
?>

La información mínima que WordPress necesita para reconocer nuestro plugin es la línea Plugin Name. El resto de la información (si está presente) se utilizará para crear la tabla de plugins en la pantalla de gestión de plugins. El orden de las líneas es indiferente.

Para que el mecanismo de actualización pueda leer correctamente la versión de nuestro plugin se recomienda elegir un formato para el número de versión y mantenerlo consistente en las diferentes versiones.

El slug de licencia debe ser un identificador común corto para la licencia bajo la que esté el plugin y está destinado a ser una forma sencilla y explícita de señalar la licencia del código.

Versiones

Por motivos de transparencia, para ser conscientes de nuestro ciclo de lanzamiento, y para esforzarnos por mantener la compatibilidad con versiones anteriores, Avatar Manager se mantendrá en la medida de lo posible bajo las directrices de control de Versionado Semántico.

Las versiones se numerarán con el siguiente formato:

<major>. <minor>.<patch>

Y se construirán siguiendo las siguientes pautas:

  • La ruptura de la compatibilidad con versiones anteriores corresponde a major (y restablece minor y patch).
  • Las nuevas adiciones que no rompen la compatibilidad con versiones anteriores se corresponden con minor (y restablece patch).
  • La corrección de errores y cambios varios se aplican a patch.

Para obtener más información sobre SemVer, visita semver.org.

Licencia

Es costumbre seguir el encabezado estándar con información sobre la licencia para el plugin. La mayoría de los plugins utilizan la misma licencia que usa WordPress, que es la licencia GPLv2 o una licencia compatible con la GPLv2. Para indicar una licencia GPLv2, incluye las siguientes líneas en nuestro plugin:

1
/*

2
Copyright © 2013 Cătălin Dogaru

3


4
This program is free software; you can redistribute it and/or modify it under

5
the terms of the GNU General Public License as published by the Free Software

6
Foundation; either version 2 of the License, or (at your option) any later

7
version.

8


9
This program is distributed in the hope that it will be useful, but WITHOUT ANY

10
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A

11
PARTICULAR PURPOSE. See the GNU General Public License for more details.

12


13
You should have received a copy of the GNU General Public License along with

14
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin

15
Street, Fifth Floor, Boston, MA 02110-1301, USA.

16
*/

A continuación, abre avatar-manager/LICENSE y pega la versión de texto sin formato de GPLv2 en él.


Paso 3. Programación del complemento Avatar Manager

Después de completar el paso anterior deberías poder localizar el plugin Avatar Manager en la pantalla Plugins.

The Avatar Manager plugin under Plugins ScreenThe Avatar Manager plugin under Plugins ScreenThe Avatar Manager plugin under Plugins Screen
El plugin Avatar Manager en Plugins Screen

Ahora, es el momento de hacer que nuestro plugin haga realmente algo. Actívalo y añade las siguientes líneas de código al archivo PHP del plugin principal:

1
define( 'AVATAR_MANAGER_VERSION', '1.0.0' );
2
define( 'AVATAR_MANAGER_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
3
define( 'AVATAR_MANAGER_AVATAR_UPLOADS', 0 );
4
define( 'AVATAR_MANAGER_DEFAULT_SIZE', 96 );

La función define() define una constante con nombre en tiempo de ejecución. La función plugin_dir_url() obtiene la URL (con barra diagonal final) para el plugin __FILE__ que se pasa. El valor de __FILE__ es la ruta completa y el nombre de archivo del archivo actual y es una de las ocho constantes mágicas que proporciona PHP.

Vamos más allá e inicializamos nuestro plugin:

1
/**

2
 * Sets up plugin defaults and makes Avatar Manager available for translation.

3
 *

4
 * @uses load_theme_textdomain() For translation/localization support.

5
 * @uses plugin_basename() For retrieving the basename of the plugin.

6
 *

7
 * @since Avatar Manager 1.0.0

8
 */
9
function avatar_manager_init() {
10
	// Makes Avatar Manager available for translation.

11
	load_plugin_textdomain( 'avatar-manager', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
12
}
13
14
add_action( 'init', 'avatar_manager_init' );

La llamada add_action() enlaza una función a una acción específica. La acción init se ejecuta después de que WordPress haya terminado de cargarse, pero antes de que se envíen los encabezados. También la llamada load_plugin_textdomain() debe hacerse durante init, de lo contrario los usuarios no podrán engancharse a ella. Veremos más sobre esto más adelante, cuando cubra la internacionalización de nuestro plugin. La función dirname() devuelve la ruta del directorio principal, mientras que la función plugin_basename() obtiene el nombre base del plugin.

Ganchos, acciones y filtros

Los ganchos son proporcionados por WordPress para permitir que un plugin se conecte al resto de WordPress; es decir, para invocar funciones en el plugin en momentos específicos, y así poner el plugin en marcha. Hay dos tipos de ganchos:

  • Acciones: Las acciones son los ganchos que el núcleo de WordPress lanza en puntos específicos durante la ejecución, o cuando se producen eventos específicos.
  • Filtros: los filtros son ganchos que WordPress inicia para modificar texto de varios tipos antes de añadirlo a la base de datos o enviarlo a la pantalla del navegador.

Paso 4. Añadir opciones de plugin

A continuación, vamos a añadir las opciones del plugin. Al permitir la personalización, se consigue que un plugin sea mucho más flexible para el usuario.

1
/**

2
 * Registers sanitization callback and plugin setting fields.

3
 *

4
 * @uses register_setting() For registering a setting and its sanitization

5
 * callback.

6
 * @uses add_settings_field() For registering a settings field to a settings

7
 * page and section.

8
 * @uses __() For retrieving the translated string from the translate().

9
 *

10
 * @since Avatar Manager 1.0.0

11
 */
12
function avatar_manager_admin_init() {
13
	// Registers plugin setting and its sanitization callback.

14
	register_setting( 'discussion', 'avatar_manager', 'avatar_manager_sanitize_options' );
15
16
	// Registers Avatar Uploads settings field under the Settings Discussion

17
	// Screen.

18
	add_settings_field( 'avatar-manager-avatar_uploads', __( 'Avatar Uploads', 'avatar-manager' ), 'avatar_manager_avatar_uploads_settings_field', 'discussion', 'avatars' );
19
20
	// Registers Default Size settings field under the Settings Discussion

21
	// Screen.

22
	add_settings_field( 'avatar-manager-default-size', __( 'Default Size', 'avatar-manager' ), 'avatar_manager_default_size_settings_field', 'discussion', 'avatars' );
23
}
24
25
add_action( 'admin_init', 'avatar_manager_admin_init' );

La acción admin_init se desencadena antes que cualquier otro enlace cuando un usuario accede al área de administración. La función register_setting() registra una configuración y su devolución de llamada de desinfección. La función add_settings_field() registra un campo de configuración en una página y sección de configuración. Los usamos para añadir nuestras opciones de plugin en la Pantalla de discusión de configuración. La función __() se explicará más adelante, cuando cubra el proceso de internacionalización.

Paso 5. Añadir la devolución de llamada de desinfección

Antes de escribir la devolución de llamada de desinfección, necesitamos definir dos funciones más, avatar_manager_get_default_options() y avatar_manager_get_options().

1
/**

2
 * Returns plugin default options.

3
 *

4
 * @since Avatar Manager 1.0.0

5
 *

6
 * @return array Plugin default options.

7
 */
8
function avatar_manager_get_default_options() {
9
	$options = array(
10
		'avatar_uploads' => AVATAR_MANAGER_AVATAR_UPLOADS,
11
		'default_size'   => AVATAR_MANAGER_DEFAULT_SIZE
12
	);
13
14
	return $options;
15
}

La función avatar_manager_get_default_options() devuelve las opciones predeterminadas del plugin.

1
/**

2
 * Returns plugin options.

3
 *

4
 * @uses get_option() For getting values for a named option.

5
 * @uses avatar_manager_get_default_options() For retrieving plugin default

6
 * options.

7
 *

8
 * @since Avatar Manager 1.0.0

9
 *

10
 * @return array Plugin options.

11
 */
12
function avatar_manager_get_options() {
13
	return get_option( 'avatar_manager', avatar_manager_get_default_options() );
14
}

La función avatar_manager_get_options() recupera las opciones actuales del plugin. La función get_otpion() devuelve el valor de la opción especificada o el valor predeterminado si la opción no está en la base de datos.

1
/**

2
 * Sanitizes and validates plugin options.

3
 *

4
 * @uses avatar_manager_get_default_options() For retrieving plugin default

5
 * options.

6
 * @uses absint() For converting a value to a non-negative integer.

7
 *

8
 * @since Avatar Manager 1.0.0

9
 *

10
 * @return array Sanitized plugin options.

11
 */
12
function avatar_manager_sanitize_options( $input ) {
13
	$options = avatar_manager_get_default_options();
14
15
	if ( isset( $input['avatar_uploads'] ) && trim( $input['avatar_uploads'] ) )
16
		$options['avatar_uploads'] = trim( $input['avatar_uploads'] ) ? 1 : 0;
17
18
	if ( isset( $input['default_size'] ) && is_numeric( trim( $input['default_size'] ) ) ) {
19
		$options['default_size'] = absint( trim( $input['default_size'] ) );
20
21
		if ( $options['default_size'] < 1 )
22
			$options['default_size'] = 1;
23
		elseif ( $options['default_size'] > 512 )
24
			$options['default_size'] = 512;
25
	}
26
27
	return $options;
28
}

La función avatar_manager_sanitize_options() desinfecta y valida las opciones del plugin. La llamada isset() determina si se establece una variable y no NULL. La función trim() elimina los espacios en blanco del principio y del final de una cadena. La función is_numeric() busca si una variable es un número o una cadena numérica. La función absint() convierte un valor en un entero no negativo.


Paso 6. Añadir los campos de ajustes

Ahora, es el momento de añadir los campos de ajustes.

1
/**

2
 * Prints Avatar Uploads settings field.

3
 *

4
 * @uses avatar_manager_get_options() For retrieving plugin options.

5
 * @uses _e() For displaying the translated string from the translate().

6
 * @uses checked() For comparing two given values.

7
 *

8
 * @since Avatar Manager 1.0.0

9
 */
10
function avatar_manager_avatar_uploads_settings_field() {
11
	// Retrieves plugin options.

12
	$options = avatar_manager_get_options();
13
	?>
14
	<fieldset>
15
		<legend class="screen-reader-text">
16
			<span>
17
				<?php _e( 'Avatar Uploads', 'avatar-manager' ); ?>
18
			</span>
19
		</legend><!-- .screen-reader-text -->
20
		<label>
21
			<input <?php checked( $options['avatar_uploads'], 1, true ); ?> name="avatar_manager[avatar_uploads]" type="checkbox" value="1">
22
			<?php _e( 'Anyone can upload', 'avatar-manager' ); ?>
23
		</label>
24
	</fieldset>
25
	<?php
26
}

La devolución de llamada avatar_manager_avatar_uploads_settings_field() imprime el campo de configuración de Cargas de avatar. La función checked() compara dos valores dados y, si los valores son los mismos, añade el atributo checked a la casilla de verificación actual. La función _e() se describirá más adelante, cuando explique el proceso de internacionalización.

1
/**

2
 * Prints Default Size settings field.

3
 *

4
 * @uses avatar_manager_get_options() For retrieving plugin options.

5
 * @uses _e() For displaying the translated string from the translate().

6
 *

7
 * @since Avatar Manager 1.0.0

8
 */
9
function avatar_manager_default_size_settings_field() {
10
	// Retrieves plugin options.

11
	$options = avatar_manager_get_options();
12
	?>
13
	<fieldset>
14
		<legend class="screen-reader-text">
15
			<span>
16
				<?php _e( 'Default Size', 'avatar-manager' ); ?>
17
			</span>
18
		</legend><!-- .screen-reader-text -->
19
		<label>
20
			<?php _e( 'Default size of the avatar image', 'avatar-manager' ); ?>
21
			<input class="small-text" min="1" name="avatar_manager[default_size]" step="1" type="number" value="<?php echo $options['default_size']; ?>">
22
		</label>
23
	</fieldset>
24
	<?php
25
}

La devolución de llamada avatar_manager_default_size_settings_field() imprime el campo Configuración de tamaño predeterminado.

Después de añadir los campos de configuración, deberías poder localizar las opciones del plugin en la Pantalla de discusión de ajustes.

The Avatar Manager plugin options under the Settings Discussion ScreenThe Avatar Manager plugin options under the Settings Discussion ScreenThe Avatar Manager plugin options under the Settings Discussion Screen
Las opciones del plugin Avatar Manager en la Pantalla de discusión de ajustes

La primera opción controla si los usuarios con privilegios bajos pueden cargar una imagen de avatar o no, mientras que la segunda opción representa el tamaño predeterminado para una imagen de avatar.


Paso 7. Añadir la sección Avatar

Para permitir que los usuarios administren su avatar, necesitamos añadir una nueva sección a tu página de perfil. Vamos a ir más allá y añadiendo la sección Avatar dentro de la pantalla de usuario Tu perfil:

1
/**

2
 * Prints Avatar section.

3
 *

4
 * @uses avatar_manager_get_options() For retrieving plugin options.

5
 * @uses get_post_meta() For retrieving attachment meta fields.

6
 * @uses remove_filter() For removing a function attached to a specified action

7
 * hook.

8
 * @uses _e() For displaying the translated string from the translate().

9
 * @uses checked() For comparing two given values.

10
 * @uses get_avatar() For retrieving the avatar for a user.

11
 * @uses esc_attr() For escaping HTML attributes.

12
 * @uses add_query_arg() For retrieving a modified URL (with) query string.

13
 * @uses self_admin_url() For retrieving an admin url link with optional path

14
 * appended.

15
 * @uses current_user_can() For checking whether the current user has a certain

16
 * capability.

17
 * @uses submit_button() For echoing a submit button, with provided text and

18
 * appropriate class.

19
 * @uses __() For retrieving the translated string from the translate().

20
 *

21
 * @since Avatar Manager 1.0.0

22
 *

23
 * @param array $profileuser User to edit.

24
 */
25
function avatar_manager_edit_user_profile( $profileuser ) {
26
	// Retrieves plugin options.

27
	$options = avatar_manager_get_options();
28
29
	$avatar_type = isset( $profileuser->avatar_manager_avatar_type ) ? $profileuser->avatar_manager_avatar_type : 'gravatar';
30
31
	if ( isset( $profileuser->avatar_manager_custom_avatar ) ) {
32
		// Retrieves attachment meta fields based on attachment ID.

33
		$custom_avatar_rating   = get_post_meta( $profileuser->avatar_manager_custom_avatar, '_avatar_manager_custom_avatar_rating', true );
34
		$user_has_custom_avatar = get_post_meta( $profileuser->avatar_manager_custom_avatar, '_avatar_manager_is_custom_avatar', true );
35
	}
36
37
	if ( ! isset( $custom_avatar_rating ) || empty( $custom_avatar_rating ) )
38
		$custom_avatar_rating = 'G';
39
40
	if ( ! isset( $user_has_custom_avatar ) || empty( $user_has_custom_avatar ) )
41
		$user_has_custom_avatar = false;
42
43
	if ( $user_has_custom_avatar )
44
		// Removes the function attached to the specified action hook.

45
		remove_filter( 'get_avatar', 'avatar_manager_get_avatar' );
46
	?>
47
	<h3>
48
		<?php _e( 'Avatar', 'avatar-manager' ); ?>
49
	</h3>
50
	<table class="form-table">
51
		...
52
	</table><!-- .form-table -->
53
	<?php
54
}
55
56
add_action( 'show_user_profile', 'avatar_manager_edit_user_profile' );
57
add_action( 'edit_user_profile', 'avatar_manager_edit_user_profile' );

Las acciones show_user_profile y edit_user_profile ayudan a personalizar la página de perfil de usuario. El parámetro $profileuser es un objeto WP_User del usuario que se esté editando. La función get_post_meta() devuelve los valores de los campos personalizados con la clave especificada de la entrada especificada. La función empty() determina si una variable está vacía. La función remove_filter() elimina una función asociada a un enlace de filtro especificado; es necesario eliminar nuestra función personalizada para recuperar una imagen de avatar.

A continuación, vamos a añadir un selector de avatares, un formulario de carga y un selector de calificación para la imagen de avatar personalizada de cada usuario.

El selector de avatares

El selector de avatares permite al usuario elegir entre usar Gravatar o una imagen de avatar personalizada. Para añadirlo, escribe el siguiente código:

1
<tr>
2
	<th>
3
		<?php _e( 'Display this avatar', 'avatar-manager' ); ?>
4
	</th>
5
	<td class="avatar-manager">
6
		<fieldset>
7
			<legend class="screen-reader-text">
8
				<span>
9
					<?php _e( 'Display this avatar', 'avatar-manager' ); ?>
10
				</span><!-- .screen-reader-text -->
11
			</legend>
12
			<label>
13
				<input <?php checked( $avatar_type, 'gravatar', true ); ?> name="avatar_manager_avatar_type" type="radio" value="gravatar">
14
				<?php echo get_avatar( $profileuser->ID, 32, '', false ); ?>
15
				<?php _e( 'Gravatar', 'avatar-manager' ); ?>
16
				<span class="description">
17
					<?php _e( '<a href="http://codex.wordpress.org/How_to_Use_Gravatars_in_WordPress" target="_blank">More information</a>', 'avatar-manager' ); ?>
18
				</span><!-- .description -->
19
			</label>
20
			<?php if ( $user_has_custom_avatar ) : ?>
21
				<br>
22
				<label>
23
					<input <?php checked( $avatar_type, 'custom', true ); ?> name="avatar_manager_avatar_type" type="radio" value="custom">
24
					<?php echo avatar_manager_get_custom_avatar( $profileuser->ID, 32, '', false ); ?>
25
					<?php _e( 'Custom', 'avatar-manager' ); ?>
26
				</label>
27
			<?php endif; ?>
28
			<?php
29
			if ( $user_has_custom_avatar && ( current_user_can( 'upload_files' ) || $options['avatar_uploads'] ) ) {
30
				$href = esc_attr( add_query_arg( array(
31
					'action'                       => 'update',
32
					'avatar_manager_action'        => 'remove-avatar',
33
					'avatar_manager_custom_avatar' => $profileuser->avatar_manager_custom_avatar,
34
					'user_id'                      => $profileuser->ID
35
				),
36
				self_admin_url( IS_PROFILE_PAGE ? 'profile.php' : 'user-edit.php' ) ) );
37
				?>
38
				<a class="delete" href="<?php echo wp_nonce_url( $href, 'update-user_' . $profileuser->ID ); ?>" onclick="return showNotice.warn();">
39
					<?php _e( 'Delete', 'avatar-manager' ); ?>
40
				</a><!-- .delete -->
41
				<?php
42
			}
43
			?>
44
		</fieldset>
45
	</td><!-- .avatar-manager -->
46
</tr>

La función get_avatar() recupera el avatar de un usuario que proporcionó un ID de usuario o una dirección de correo electrónico. Para recuperar una imagen de avatar personalizada mediante un ID de usuario, usamos la función avatar_manager_get_custom_avatar(), que escribiremos más adelante. La función current_user_can() comprueba si el usuario actual tiene una capacidad determinada. Normalmente, los usuarios con privilegios bajos como los suscriptores no pueden cargar archivos; esta es la razón por la que usamos la variable $options['avatar_uploads']. La función esc_attr() extrae los atributos HTML. La función self_admin_url() recupera una URL de enlace de administrador con la ruta de acceso opcional anexada. La constante IS_PROFILE_PAGE nos dice si estamos editando nuestro perfil o el perfil de otro usuario. La función wp_nonce_url() recupera la URL con nonce añadido a la consulta de URL. Antes de eliminar un avatar, pedimos al usuario que confirme llamando al método showNotice.warn() en el evento onclick del enlace Delete (Eliminar) que muestra un aviso de advertencia.

El formulario de carga

El formulario de carga permite a un usuario navegar y cargar una imagen de avatar personalizada:

1
<?php if ( current_user_can( 'upload_files' ) || $options['avatar_uploads'] ) : ?>
2
	<tr>
3
		<th>
4
			<?php _e( 'Select Image', 'avatar-manager' ); ?>
5
		</th>
6
		<td>
7
			<fieldset>
8
				<legend class="screen-reader-text">
9
					<span>
10
						<?php _e( 'Select Image', 'avatar-manager' ); ?>
11
					</span>
12
				</legend><!-- .screen-reader-text -->
13
				<label class="description" for="avatar-manager-upload-avatar">
14
					<?php _e( 'Choose an image from your computer:', 'avatar-manager' ); ?>
15
				</label><!-- .description -->
16
				<br>
17
				<input name="avatar_manager_import" type="file">
18
				<?php submit_button( __( 'Upload', 'avatar-manager' ), 'button', 'avatar-manager-upload-avatar', false ); ?>
19
			</fieldset>
20
		</td>
21
	</tr>
22
<?php endif; ?>

La función submit_button() se hace eco de un botón de envío, con texto proporcionado y la clase adecuada.

El selector de clasificación

El selector de clasificación solo aparece cuando hay un avatar personalizado disponible. Para añadirlo, escribe las siguientes líneas:

1
<?php if ( $user_has_custom_avatar ) : ?>
2
	<tr>
3
		<th>
4
			<?php _e( 'Avatar Rating', 'avatar-manager' ); ?>
5
		</th>
6
		<td>
7
			<fieldset>
8
				<legend class="screen-reader-text">
9
					<span>
10
						<?php _e( 'Avatar Rating', 'avatar-manager' ); ?>
11
					</span>
12
				</legend><!-- .screen-reader-text -->
13
				<?php
14
				$ratings = array(
15
					// Translators: Content suitability rating:

16
					// http://bit.ly/89QxZA

17
					'G'  => __( 'G &#8212; Suitable for all audiences', 'avatar-manager' ),
18
					// Translators: Content suitability rating:

19
					// http://bit.ly/89QxZA

20
					'PG' => __( 'PG &#8212; Possibly offensive, usually for audiences 13 and above', 'avatar-manager' ),
21
					// Translators: Content suitability rating:

22
					// http://bit.ly/89QxZA

23
					'R'  => __( 'R &#8212; Intended for adult audiences above 17', 'avatar-manager' ),
24
					// Translators: Content suitability rating:

25
					// http://bit.ly/89QxZA

26
					'X'  => __( 'X &#8212; Even more mature than above', 'avatar-manager' )
27
				);
28
29
				foreach ( $ratings as $key => $rating ) {
30
					?>
31
					<label>
32
						<input <?php checked( $custom_avatar_rating, $key, true ); ?> name="avatar_manager_custom_avatar_rating" type="radio" value="<?php echo esc_attr( $key ); ?>">
33
						<?php echo $rating; ?>
34
					</label>
35
					<br>
36
					<?php
37
				}
38
				?>
39
				<span class="description">
40
					<?php _e( 'Choose a rating for your custom avatar.', 'avatar-manager' ); ?>
41
				</span><!-- .description -->
42
			</fieldset>
43
		</td>
44
	</tr>
45
<?php endif; ?>

Permite al usuario elegir una calificación adecuada para la imagen de avatar personalizada que se esté utilizando.


Paso 8. Añadir scripts y estilos

Ahora que hemos añadido la sección Avatar, es hora de aplicarle estilo. Además, escribiremos algunos JS para cambiar la codificación del formulario; este paso es necesario porque le hemos añadido un control de carga de archivos.

El estilo CSS

Para dar estilo a nuestro plugin, abre avatar-manager/avatar-manager.css y escribe las siguientes líneas:

1
#profile-page .avatar-manager img {
2
	margin: 2px 0;
3
	vertical-align: middle;
4
}
5
6
#profile-page .avatar-manager .delete {
7
	color: red;
8
	padding: 2px;
9
}
10
11
#profile-page .avatar-manager .delete:hover {
12
	background: red;
13
	color: #fff;
14
	text-decoration: none;
15
}

Esto alinea verticalmente una imagen de avatar con una caja de radio y aplica estilos al enlace Eliminar en consecuencia para una integración perfecta con la interfaz nativa de WordPress.

El script JS

A continuación, abre avatar-manager/avatar-manager.js y añade el siguiente código:

1
jQuery( document ).ready( function() {
2
	jQuery( '#your-profile' ).attr( 'enctype', 'multipart/form-data' );
3
} );

La función .attr() establece el valor de uno o más atributos para cada elemento coincidente. El atributo enctype especifica cómo se deben codificar los datos de formulario al enviarlos al servidor. Necesitamos cambiar su valor a multipart/form-data para permitir la carga de archivos.


Paso 9. Encolar los guiones y los estilos

El método seguro y recomendado de añadir scripts y estilos a una página generada por WordPress consiste en usar wp_enqueue_script() y wp_enqueue_style(). Estas funciones incluyen los scripts y los estilos si aún no han sido incluidos, y controlan de forma segura las dependencias.

1
/**

2
 * Enqueues plugin scripts and styles for Users Your Profile Screen.

3
 *

4
 * @uses wp_register_style() For registering a CSS style file.

5
 * @uses wp_enqueue_style() For enqueuing a CSS style file.

6
 * @uses wp_register_script() For registering a JS script file.

7
 * @uses wp_enqueue_script() For enqueuing a JS script file.

8
 *

9
 * @since Avatar Manager 1.0.0

10
 */
11
function avatar_manager_admin_enqueue_scripts() {
12
	global $hook_suffix;
13
14
	if ( $hook_suffix == 'profile.php' || $hook_suffix == 'user-edit.php' ) {
15
		// Registers plugin CSS style file.

16
		wp_register_style( 'avatar-manager.css', AVATAR_MANAGER_PLUGIN_URL . 'avatar-manager.css', array(), '1.0.0' );
17
18
		// Enqueues plugin CSS style file.

19
		wp_enqueue_style( 'avatar-manager.css' );
20
21
		// Registers plugin JS script file.

22
		wp_register_script( 'avatar-manager.js', AVATAR_MANAGER_PLUGIN_URL . 'avatar-manager.js', array( 'jquery' ), '1.0.0' );
23
24
		// Enqueues plugin JS script file.

25
		wp_enqueue_script( 'avatar-manager.js' );
26
	}
27
}
28
29
add_action( 'admin_enqueue_scripts', 'avatar_manager_admin_enqueue_scripts' );

La acción admin_enqueue_scripts es la primera acción enganchada a las acciones de scripts de administración. A continuación, se utiliza la variable global $hook_suffix para añadir nuestros scripts y estilos únicamente en las páginas necesarias. Antes de poner en cola un script o estilo, primero tenemos que registrarlo. La función wp_register_style() es una forma segura de registrar un archivo de estilo CSS para su posterior uso; la función wp_enqueue_style() se utiliza para ponerlo en cola. Del mismo modo, las funciones wp_register_script() y wp_enqueue_script() se utilizan para registrar y poner en cola nuestro archivo script JS del plugin.

Después de este paso deberías ser capaz de localizar las opciones del plugin dentro de la pantalla de usuario Tu perfil.

The Avatar Manager plugin options under the User Your Profile ScreenThe Avatar Manager plugin options under the User Your Profile ScreenThe Avatar Manager plugin options under the User Your Profile Screen
Las opciones del plugin Avatar Manager en la pantalla de usuario Tu perfil

La primera opción te permite elegir entre usar Gravatar o una imagen de avatar autoalojada. El segundo campo te permite navegar y cargar una imagen de avatar personalizada. La opción Clasificación de avatares solo aparece cuando hay un avatar personalizado disponible. Pero más adelante veremos más sobre esto, cuando manejaremos las cargas de avatares.


Qué viene a continuación

Esto completa la primera parte de nuestro tutorial. Espero que hayas disfrutado del tiempo que hemos pasado juntos y que te haya parecido útil. En la siguiente parte vamos a terminar el plugin Avatar Manager; gestionaremos las cargas de avatares y la generación de imágenes bajo demanda, Internacionalizaremos nuestro plugin y mucho más. ¡Gracias por leerme!


Referencias

  • WordPress Coding Standards: Estándares de código de WordPress, información general sobre los estándares de codificación para el desarrollo de WordPress.
  • Writing a Plugin: Escribir un plugin, el mejor punto de partida para aprender sobre el desarrollo de plugins para WordPress.
  • API de plugins: Descripción de cómo utilizar enlaces de acción y filtro en tu plugin WordPress, y funciones principales que los plugins pueden invalidar.
  • API de ajustes: Una referencia con ejemplos para añadir nuevos ajustes a las pantallas de configuración existentes.
  • Function Reference: Referencia de función, un artículo con muchas de las funciones principales de WordPress útiles para los desarrolladores de plugins y temas; enumera la mayoría de las funciones principales, excluyendo las etiquetas de plantilla.
  • SemVer: Especificación del control de versiones semántico (SemVer).
  • GPLv2: Licencia Pública General GNU, versión 2.

Enlaces externos