En el artículo ¿Por qué no usar temas hijos con Elementor? tu conté que no era buena idea meter snippets en el functions.php y propuse como alternativa crearte tu propio plugin.
Vamos a ver lo fácil que es…
Agradecimientos
Ante de meterme en harina, te contaré que casi todo lo que te voy a explicar lo aprendí en la meetup de WordPress Madrid concretamente en el evento 2×1 Madrid WordPress Meetup Junio, en 2019.
Justo hasta que me puse a escribir este artículo, estaba convencido de que la ponencia sobre Cómo crear tu primer plugin para WordPress la había dado el crack Juan Manuel Civico (cuidado, Civico, no Cívico, y no es no que no sea cívico el muchacho, es que su apellido es llano, no esdrújulo), pero no, Juanma dio una estupenda ponencia sobre el wp-config que te recomiendo que leas en su blog.
Sin embargo, a quien debo agradecer lo que aquí explico es a Oscar Pérez, que fue el ponente de aquel día de junio.
¿Qué es un plugin?
Un plugin de WordPress es un fichero php con una mínima estructura que vamos a ver enseguida, que está bajo la carpeta /wp-content/plugins/
de tu instalación. Podrías ponerlo directamente en /wp-content/plugins/
, pero por mantener el orden es mucho más recomendable crear una carpeta. En nuestro caso crearemos la carpeta mendaplugin, así que a partir de ahora nuestro lugar de trabajo será /wp-content/plugins/mendaplugin
.
El plugin pelao
Para crear nuestro primer plugin, usaremos un editor de texto. Cualquiera vale para nuestro ejemplo. Crearemos un archivo con extensión php, en nuestro caso lo llamaré plugin-pelao.php
Un fichero php típicamente comienza con la marca <?php y termina con ?> (podría no tener ninguna de estar marcas o tener muchas, eso ahora no importa). Para escribir comentarios se usa la marca de apertura /* y la de cierre es */
Y un plugin, curiosamente es un plugin si tiene ciertos comentarios en su cabecera. Vamos a ver cómo es nuestro plugin pelao:
<?php
/**************************************************************
Plugin Name: Plugin sin chicha (alias plugin pelao)
Description: Este plugin no hace ná pero es un plugin
Plugin URI: https://elemendas.com/lifetime
Version: 1.0
License: GPL 3.0 https://www.gnu.org/licenses/gpl-3.0.html
Author: el menda Santi
Author URI: https://elemendas.com/
**************************************************************/
?>
Los textos coloreados son para que veas dónde van a aparecer en el escritorio de WordPress.
Cuando subimos nuestro plugin-pelao.php
a la carpeta /wp-content/plugins/mendaplugin
que creamos anteriormente, y vamos a ver nuestra lista de plugins en el escritorio veremos esto:
Automáticamente aparece nuestro maravilloso plugin, y si observamos, vemos que lo que hemos escrito en la cabecera aparece ahí.
- El nombre:
Plugin sin chicha (alias plugin pelao)
, - La descripción:
Este plugin no hace ná pero es un plugin
- La versión
Version: 1.0
- El autor:
el menda Santi
, que además es un enlace al Author URI, en este casohttps://elemendas.com/
- Y un enlace que dice Visitar la web del plugin, que enlaza a la dirección que pusimos en
Plugin URI
en nuestro casohttps://elemendas.com/lifetime
. Esta líne Plugin URI es opcional, si la quitamos no saldrá el texto de Visitar la web del plugin
Además ves que el plugin está desactivado, y si pulsas en activar ¡se activa! pero como ya avisa su título, es un plugin sin chicha, y hacer, no hace ná.
Meter snippets
Ya tienes un lugar donde meter tus fragmentos de código. Si eras capaz de meter código php en el functions.php, aquí es lo mismo. Lo copias, lo pegas en el espacio que queda entre la cabecera y la línea de cierre ?>
y lo pruebas.
La primera ventaja es que si el código no funciona como esperabas, puedes desactivar el plugin. Incluso, si está tan mal hecho que se rompe la web, solo tienes que borrar el fichero php de la carpeta donde lo hayas creado y todo vuelve a la normalidad.
¿Qué puedes meter en tu plugin?
En tu plugin puedes poner todo lo que tenías en el functions.php de tu tema y todo ese código que insistentemente te dirán multitud de blogs que metas en el functions.php de tu tema. También lo que hayas probado con tu plugin de fragmentos de código (como mi favorito Code Snippets).
También puedes meter el código de creación de tipos de contenido personalizados, ya sea que lo hagas a mano, con el generador de CPT online o tras haberlo hecho y probado con el comodísimo Custom Post Type UI, que te ofrece una opción de obtener el código php para que siemplemente lo pegues en tu plugin.
¿Qué no deberías meter en tu plugin?
Si buscas cómo meter el código de Google Analytics, el pixel de Facebook o cualquier otro código que use cookies, encontrarás en multitud de lugares, incluyendo los de prestigiosos hostings que te dirán que ¡cómo no! los metas en el maldito functions.php, en el header.php, o quizá que uses algún que otro plugin que viene a hacer lo mismo.
Pues no, eso no lo metas en tu maravilloso plugin. Repito no metas el código de Analitics, el pixel de facebook ni ninguna de estas mierdas funcionalidades maravillosas en tu plugin.
¿Que por qué? Porque te estás jugando una multa, y para saber de qué hablo, mejor que te lo cuente el menda Santiago Alonso en su taller «Legaliza tu web con Elementor sin morir en el intento».
Un plugin con chicha, el mendaplugin
Para que ya puedas usar tu flamante nuevo plugin con algo de chicha, aquí tienes código que suelo usar para personalizar el login y algún truco de seguridad.
Modificaciones para la página de login
La página de login de WordPress es muy sosa, pero puedes modificarla con estos códigos a tu gusto.
Cambiar el mensaje de error en el login del panel de administración
El formulario de login de WordPress da demasiadas pistas. Si pones bien el usuario y mal la contraseña, el mensaje es distinto que si pones mal el usuario. Eso da pistas a los malos, si dan con el usuario ya «solo» queda descifrar la contraseña.
Es mejor no dar ninguna pista, con este código no las damos a los malos y ayudamos a los usuarios legítimos recordándoles el típico error del bloqueo de mayúsculas:
function my_login_error_message() {
return 'Has escrito mal el usuario, la contraseña o ambos. Mira a ver si tienes las mayúsculas bloqueadas';
}
add_filter('login_errors', 'my_login_error_message');
Añadir un título
Con este código aparecerá un título en la página de login.
function my_login_logo_url_title() {
return '<div id="titulo">Página de administración</div>';
}//end my_login_logo_url_title()
add_filter( 'login_headertext', 'my_login_logo_url_title' );
Cambiar el enlace del logo
El logo de WordPress está enlazado por defecto a es.wordpress.org. Con este código apuntará a la home de tu instalación.
function my_login_logo_url() {
return home_url();
}//end my_login_logo_url()
add_filter( 'login_headerurl', 'my_login_logo_url' );
Mostrar un texto bajo el título
Puede mejorar el formulario de acceso al escritorio si explicas dónde estamos y muestras instrucciones claras. Este código es un buen ejemplo:
function mensajeLogin()
{
return "<h2 id='login-title'>Entrada al panel de administración de <b>".get_bloginfo( 'name' )."</b></h2><p id='login-subtitle'>Por favor ingresa en tu cuenta</p>";
}
add_filter( 'login_message', 'mensajeLogin' );
Modificaciones de la barra de administración
La barra de administración de WordPress es muy útil, pero puede serlo más con algo de código
Elimina el logo de WordPress de la barra de administración
El logo de la esquina superior izquierda tiene varios enlaces a wordpress.org que quizá sean útiles a wordpresseros como tú y yo, pero, en una web en producción más bien estorban. Para quitarlo usa este código.
function remove_wp_logo() {
global $wp_admin_bar;
$menu_id = 'wp-logo'; // the menu id which you want to remove
$wp_admin_bar->remove_menu($menu_id);
}
add_action( 'wp_before_admin_bar_render', 'remove_wp_logo' );
Añadir plugin desde la barra
No sé tú, pero yo muchas veces, cuando quiero añadir un plugin, de forma natural me voy a la barra de administración, donde sale «+ Añadir» y me frustra porque ofrece añadir entradas, medios, páginas, CPTs, usuarios, pero no plugins. Para que te salga esta opción usa este código:
function add_plugin_to_new_content_admin_bar() {
global $wp_admin_bar;
if(!(defined('DISALLOW_FILE_MODS') && DISALLOW_FILE_MODS)) {
$wp_admin_bar->add_menu( array(
'id' => 'new-plugin',
'parent' => 'new-content',
'title' => 'Plugin',
'href' => admin_url('plugin-install.php'),)
);
}
}
add_action( 'wp_before_admin_bar_render', 'add_plugin_to_new_content_admin_bar' );
Modificaciones del escritorio
Cambia el texto de gracias del pie del escritorio.
En el pie de todas las páginas del escritorio aparece el texto Gracias por crear con WordPress. Puedes poner tu toque personal con este código:
if(is_admin()) {
// Admin footer modification
// Cambia el texto «Gracias por crear con WordPress.» del pie del escritorio.
function change_footer_admin () {
echo '<span id="footer-thankyou">Gracias por seguir a <a href="https://elemendas.com/" target="_blank">elemendas</a>.</span>';
}
add_filter('admin_footer_text', 'change_footer_admin');
}
Eliminar cajas wordpresseras del escritorio.
Cuando entras en tu panel de WordPress, te encuentras con un montón de cajas con información de todo tipo. Puede que sea útil para ti, pero posiblemente no tenga mucho sentido en una web entregada a un cliente.
Este código es una ampliación del publicado por Fernando Tellado en Ayuda WordPress
Las cajas que no quiero que desaparezcan las comento poniendo // por delante.
function quita_cajas_escritorio() {
//remove_meta_box('dashboard_right_now', 'dashboard', 'normal'); // Ahora mismo
//remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal'); // Comentarios recientes
//remove_meta_box('dashboard_incoming_links', 'dashboard', 'normal'); // Enlaces entrantes
remove_meta_box('wpseo-dashboard-overview', 'dashboard', 'normal'); // Yoast SEO
remove_meta_box('e-dashboard-overview', 'dashboard', 'normal'); // Elementor
remove_meta_box('itsec-dashboard-widget', 'dashboard', 'normal'); // iThemes Security
remove_meta_box('dashboard_plugins', 'dashboard', 'normal'); // Plugins
remove_meta_box('dashboard_site_health', 'dashboard', 'normal'); //Quitar el panel de salud del sitio
//remove_meta_box('dashboard_recent_drafts', 'dashboard', 'side'); // Borradores recientes
remove_meta_box('dashboard_quick_press', 'dashboard', 'side'); // Publicación/Borrador rápido
remove_meta_box('dashboard_primary', 'dashboard', 'side'); // Noticias del blog de WordPress
remove_meta_box('dashboard_secondary', 'dashboard', 'side'); // Otras noticias de WordPress
remove_action( 'welcome_panel', 'wp_welcome_panel' ); //Quitar el panel de bienvenida de WorPress en el panel de administracion
}
add_action('wp_dashboard_setup', 'quita_cajas_escritorio' );
Material descargable
Ya te he dejado una buena colección de fragmentos de código para personalizar y mejorar tu WordPress, pero antes de darte enlaces de descarga, quiero proponerte un reto…
En el descargable del mendaplugin, hay un código que no he mencionado. Si lo descubres, escribe un comentario y explica para qué sirve.
Aquí te dejo el material usado en este artículo, y el de Óscar Pérez donde encontrarás más snippets útiles y si te interesa, cómo convertir tu plugin en un mu-plugin;
- plugin-pelao y mendaplugin
- Amanece que no es poco
- Personalización
- mu-plugin
- Ordenar el menú de admin
- Presentación: Cómo crear tu primer plugin para WordPress
La peachepera imagen de este post está sacada de Envato Elements.
5 comentarios en “Haz tu propio plugin”
Muy buen articulo, excelente.
¡Gracias, Guido! ¿Qué es lo que más te ha gustado?
Gracias por el artículo.
Explicación sencilla y útil.
Saludos
Acepto el reto: El fragmento está al final y sirve para trolear a los hackers que intentan a atacar al ‘author’ en los comentarios de los posts 😉
Mi pregunta:
Imagina que quiero crear diferentes funciones en diferentes archivos, por ejemplo mis snippets de seguridad en un archivo seguridad.php, cosas de login en cambios-login.php y así sucesivamente. Así lo tengo clasificado según funciones. ¿Cómo podría hacerlo para que funcione?
Estupendo Alex, ese es el código al que me refería. Es para evitar una debilidad de WordPress que permite conocer el nombre de los usuarios (incluído el admin).
A tu pregunta, lo más fácil es que cada archivo sea un plugin independiente con su propia carpeta. Así seguridad.php lo subes a /wp-content/plugins/seguridad y cambios-login.php a /wp-content/plugins/cambios-login