¿Cómo hacer un MU-plugin personalizado?

La diferencia entre un plugin regular y un MU (“  must use”) plugin en WordPress es que el MU plugin se activa automáticamente una vez subido a una carpeta específica en WordPress. 

En este artículo

Hacer un MU Plugin personalizado

1
Crea una carpeta llamada  mu-plugins dentro de  wp-content.
En caso de que la carpeta mu-plugins exista ya, no es necesario crearla otra vez, usa la existente.
2
Usando un editor de texto básico  crea un nuevo fichero e introduce algunas lineas de código.
Como ventaja inicial, puedes  usa el sencillo boilerplate que encuentras al final de este artículo.
3
Guarda el fichero con cualquier nombre te guste, usando pero solo letras, números y guión en el nombre del fichero.
Por ejemplo: wp-rocket-custom.php
4
Sube este fichero a la carpeta  mu-plugins que has creado al punto 1.
5
Finalmente, asegúrate de desactivar y re-activar  WP Rocket.

Nota: puedes también crear un plugin regular en vez de un MU plugin, sencillamente subiendo el mismo fichero en wp-content/plugins en vez de mu-plugins. Recuerda pero que en este caso tendrás que activar tu plugin regular en la páginas de los plugin de WordPress.

Aspectos a Considerar

  • Haz siempre un test de tu plugin antes de subirlo a tu sitio web publico! 
    Recuerda que un punto y come mancante en PHP puede romper tu sitio. Cuando algo se rompe, arréglalo eliminando el fichero del plugin. 
  • Asegúrate que el editor de texto que usas mientras codificas está en modalidad texto sin formato! 
    El formato de texto enriquecido podría comprometer tu código y resultar en errores PHP, o incluso romper tu sitio.
  • Los MU plugins se cargan automáticamente y en orden alfabético según el nombre del fichero.
  • Si por alguna razón estás usando una función existente de WP Rocket, envuélvela siempre en una condición como esta: 
    if ( function_exists( 'some_wp_rocket_function' ) ) { 
    	// haz algo con la some_wp_rocket_function() aquí
    }
    	
  • Otra vez, asegúrate de desactivar y re-activar WP Rocket una vez que hayas subido tu plugin personalizado.

Ejemplo de MU plugin

En caso de que se produzcan errores cuando copias y pegas el código siguiente, prueba a  descargar este Gist y asegúrate que tu editor de texto sea configurado como UTF-8.

<?php
/**
 * Plugin Name: Your Plugin Name Here
 * Description: Short description of your plugin here.
 * Author:      your name here
 * License:     GNU General Public License v3 or later
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 */

// Basic security, prevents file from being loaded directly.
defined( 'ABSPATH' ) or die( 'Cheatin&#8217; uh?' );

/* Prefix your custom functions!
 *
 * Function names must be unique in PHP.
 * In order to make sure the name of your function does not
 * exist anywhere else in WordPress, or in other plugins,
 * give your function a unique custom prefix.
 * Example prefix: wpr20151231
 * Example function name: wpr20151231__do_something
 *
 * For the rest of your function name after the prefix,
 * make sure it is as brief and descriptive as possible.
 * When in doubt, do not fear a longer function name if it
 * is going to remind you at once of what the function does.
 * Imagine you’ll be reading your own code in some years, so
 * treat your future self with descriptive naming. ;)
 */

/**
 * Pass your custom function to the wp_rocket_loaded action hook.
 *
 * Note: wp_rocket_loaded itself is hooked into WordPress’ own
 * plugins_loaded hook.
 * Depending what kind of functionality your custom plugin
 * should implement, you can/should hook your function(s) into
 * different action hooks, such as for example
 * init, after_setup_theme, or template_redirect.
 * 
 * Learn more about WordPress actions and filters here:
 * https://developer.wordpress.org/plugins/hooks/
 *
 * @param string 'wp_rocket_loaded'         Hook name to hook function into
 * @param string 'yourprefix__do_something' Function name to be hooked
 */
add_action( 'wp_rocket_loaded', 'yourprefix__do_something' );

/**
 * Define your custom function here.
 * This example just returns true.
 * 
 * @return bool Boolean value TRUE
 */
function yourprefix__do_something() {
	return true;
}