Haz tu propio plugin

Haz tu propio plugin
Indice

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 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 caso https://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 caso https://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;

La peachepera imagen de este post está sacada de Envato Elements.

Facebook
Twitter
LinkedIn
Pinterest

Entradas relacionadas

📩 Vendiendo, que es gerundio

Tranquilidad, menda. No tenemos intención de vender (aún) Elemendas y hacer un exit de esos modernos. Aunque viendo el historial de Automattic estos meses… igual viene Matt con la chequera pronto a vernos. En fin, que nos ha quedado una newsletter muy “vendible” y no se nos ocurría mejor asunto.

Seguir leyendo »

5 comentarios en “Haz tu propio plugin”

  1. 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?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

👋¡Hola, menda!

¿Quieres hablar con nosotros sobre algún tema?, ¿o sugerirnos algún plugin? Escríbenos desde este formulario y te atenderemos lo antes posible.

  • Responsable: Santiago Becerra Carrillo, titular del website elemendas.com.
  • Finalidad: Responder a tu consulta.
  • Legitimación: Consentimiento del interesado (es decir, tú), al enviar el formulario.
  • Destinatarios: Los datos no se cederán a terceros salvo en los casos en que exista una obligación legal. En todo caso, los datos que nos facilitas están ubicados en servidores cuya sede se encuentra dentro del territorio de la UE o gestionados por Encargados de Tratamiento acogidos al acuerdo “Privacy Shield”, aprobado por el Comité Europeo de Protección de Datos. Nuestro proveedor de envío de mail es MailerLite.
  • Derechos: Acceder, rectificar y suprimir los datos, así como otros derechos, como se explica en la información adicional.
  • Este sitio está protegido por reCAPTCHA y se aplican la política de privacidad y términos del servicio de Google.