Un mu-plugin es un tipo de plugin con características espciales. El «mu» viene de mulit-usuario ya que originariamente fueron creados para facilitar la administración de webs WordPress multinodo pero posteriormente se generalizaron para que cualquier tipo de instalación WordPress se pudiera beneficiar de ellos. Como parte del proceso, se cambió la interpretación de su nombre y ahora los «mu» se conocen como «Must Use» plugins.
La característica más interesante de estos plugins es que siempre se ejecutan antes que los plugins «normales» lo que los hace muy útiles para controlar cuándo y cómo se cargan y ejecutan estos últimos. Por ejemplo, la gente de MigrateDB Pro utiliza un mu-plugin para bloquear otros plugins durante el proceso de migración. Algo parecido hacemos nosotros. En Nelio A/B testing, el mu-plugin que incluimos como parte del servicio tiene como objetivo acelerar la carga de las páginas que forman parte de un test gracias a parar temporalmente la carga de otros plugins durante nuestras peticiones AJAX internas.
Otra característica de estos plugins es que no se pueden instalar (ni desinstalar) a través de la consola de administración de WordPress sino que hay que hacerlo subiendo los archivos via FTP a un directorio especial de la instalación (wp-content/mu-plugins por defecto). El problema de esto es que a bastantes de nuestros usuarios les parece demasiado complicado y nos dimos cuenta que muchos no aprovechaban las ventajas de nuestro mu-plugin.
Por lo tanto, mi consejo es que si crees que un mu-plugin puede ser útil para un proyecto WordPress que estés desarrollando, es mejor dar la opción a los usuarios de poder instalar el mu-plugin automáticamente a través de una función PHP que suba los archivos al directorio de mu-plugins automáticamente. En nuestro caso, tenemos una opción en la página de configuración que al activarla ejecuta el siguiente código para (des)instalar el plugin. Os lo dejo aquí por si os puede ser útil.
public static function is_performance_muplugin_installed() { $mu_dir = ( defined( 'WPMU_PLUGIN_DIR' ) && defined( 'WPMU_PLUGIN_URL' ) ) ? WPMU_PLUGIN_DIR : trailingslashit( WP_CONTENT_DIR ) . 'mu-plugins'; $mu_dir = untrailingslashit( $mu_dir ); $mu_plugin = $mu_dir . '/nelioab-performance.php'; return file_exists( $mu_plugin ); } public static function toggle_performance_muplugin_installation() { $mu_dir = ( defined( 'WPMU_PLUGIN_DIR' ) && defined( 'WPMU_PLUGIN_URL' ) ) ? WPMU_PLUGIN_DIR : trailingslashit( WP_CONTENT_DIR ) . 'mu-plugins'; $mu_dir = untrailingslashit( $mu_dir ); $source = NELIOAB_ROOT_DIR . '/mu-plugins/nelioab-performance.php'; $dest = $mu_dir . '/nelioab-performance.php'; $result = array( 'status' => 'OK', 'error' => '' ); if ( !self::is_performance_muplugin_installed() ) { // INSTALL if ( !wp_mkdir_p( $mu_dir ) ) { $result['error'] = sprintf( __( 'Error! The following directory could not be created:%s
.', 'nelioab' ), $mu_dir ); $result['status'] = 'ERROR'; } if ( $result['status'] !== 'ERROR' && !copy( $source, $dest ) ) { $result['error'] = sprintf( __( 'Error! Could not copy Nelio's performance MU-Plugin from%1$s
to%2$s
.', 'nelioab' ), $source, $dest ); $result['status'] = 'ERROR'; } } else { if ( file_exists( $dest ) && !unlink( $dest ) ) { $result['error'] = sprintf( __( 'Error! Could not remove the Nelio's performance MU-Plugin from%s
.', 'nelioab' ), $dest ); $result['status'] = 'ERROR'; } } header( 'Content-Type: application/json' ); echo json_encode( $result ); die(); }
Imagen destacada de Émile Perron en Unsplash.
Deja una respuesta