Plugins para Wordpress
1. ¿Qué es un plugin
2. Hooks
- Similares a listeners de Javascript, o triggers de Oracle
- Registran funciones que se llamarán en momentos adecuados
2.1. Hooks de acción
- Llamados antes de realizar una acción:
save_post
,get_footer
,setup_theme
(lista completa) (otra lista)- Internamente, Wordpress los llama con
do_action
odo_action_ref_array
- Una acción
- Recibe información sobre el objeto que actua
- Modifica ese objeto, u otra parte de Wordpress, y no devuelve nada
- Es como un procedure de Oracle
2.2. Uso de hooks de acción
function envia_cabecera_http_personalizada() { header('X-Custom-Header: El_Valor_Personalizado'); } add_action('send_headers', 'envia_cabecera_http_personalizada');
2.3. Hooks de filtro
- Sirven para modificar datos devueltos por algunas funciones.
get_pages
,body_class
,sanitize_title
,get_comment_excerpt
(lista completa)- Internamente, Wordpress los llama con
apply_filters
2.4. Uso de hooks de filtro
function pon_prefijo_a_titulo($title) { if (is_single() ) { $title = 'Este es mi blog: ' . $title; } return $title; } add_filter('the_title', 'pon_prefijo_a_titulo');
3. Plugins
- Hay varias formas de hacerlos
- Usaremos
- Un directorio en
/wp-contents/plugins
- Dentro de ese directorio, un fichero
.php
con el nombre del directorio
- Un directorio en
3.1. Cabecera del plugin
- En un comentario de bloque
/* .. */
, se incluyen datos del plugin - Nombre del plugin, sitio de actualización, página web, autor, dependencias…
/** * Plugin Name: Plugin Name * Plugin URI: https://example.com/plugin-name * Description: Description of the plugin. * Version: 1.0.0 * Requires at least: 5.2 * Requires PHP: 7.2 * Author: Your Name * Author URI: https://example.com * Text Domain: plugin-slug * License: GPL v2 or later * License URI: http://www.gnu.org/licenses/gpl-2.0.txt * Update URI: https://example.com/my-plugin/ * Requires Plugins: my-plugin, yet-another-plugin */
3.2. Fichero principal del plugin
- Fichero
.php
dentro del directorio del plugin, del mismo nombre - Registra las acciones y filtros necesarios
- Opcionalmente
- Define las funciones llamadas por los hooks
- Incluye otros ficheros php (con
plugin_dir_path
) - Registrar funciones para activar y desactivar el plugin (con
register_activation_hook
)
function miplugin_agrega_una_pagina_al_menu_admin(){ add_menu_page( 'Página del plugin', // Title of the page 'Página informativa del plugin de disclaimer', // Text to show on the menu link 'manage_options', // Capability requirement to see the link plugin_dir_path(__FILE__) . 'pagina-admin.php' // se añade a /wp-admin ); add_action( 'admin_menu', 'miplugin_agrega_una_pagina_al_menu_admin' );
3.3. Normas básicas a seguir
- Las funciones y constantes son globales: hay que ponerles un prefijo para que no colisionen
- Sin efectos laterales en los filtros: son funciones
4. Ejercicios
4.1. Crea un plugin vacío
- Crea un plugin vacío
- Elije un nombre (ejemplo:
iaw_test_plugin
) - Elije un prefijo para tus funciones y opciones (ejemplo:
iaw_test_plugin
) - Incluye comentario con los datos del plugin
- Elije un nombre (ejemplo:
- El plugin debe aparecer al visitar http://servidor/wordpress/wp-admin/plugins.php
4.2. widget en el dashboard
- Añade un widget que simplemente diga "¡Hola, mundo!"
- Acción
wp_dashboard_setup
- Función
wp_add_dashboard_widget
- Acción
4.3. Página nueva en el menú de administración
- Acción
admin_menu
- Función
add_menu_page
- La página no tendrá funcionalidad: solo mostrará un texto lorem ipsum
4.4. Filtro de contenido
- Filtro
the_content
- Quita todas las ocurrencias de la pseudopalabra
WTF
, las cambia por###
4.5. Página de settings
- En vez de
###
, se podrá censurar la palabra prohibida con una cadena configurable - Acción
admin_init
- Registrar una opción con la función
register_setting
- El nombre de la opción:
- Registrar una opción con la función
- Acción
admin_menu
- Función
add_options_page
- Función
- En la función de opciones de página
- Usar
settings_fields
dentro del formulario - Los campos
input
tendrán los nombres definidos enregister_settings
- El valor actual se puede conseguir con
get_option
- Usar
echo '<form method="post" action="options.php">'; settings_fields( 'wpdocs-plugin-settings-group' ); $value = get_option("..."); echo '<input type="..." name="..." value="$value">' ...
4.6. Más posibilidades
- Haz que el filtro solo se active en chrome, pero no en firefox
- Haz que el filtro se pueda activar o desactivar
- Con otro setting
- En el dashboard se verá si está activado, y qué palabra se utiliza para censurar.
- Empaqueta el plugin y publícalo