X

Desactivar la actualización para plugins específicos

Hace poco me encargaron un trabajo para modificar la funcionalidad de un plugin, lo primero fue buscar algún Hook para la funcionalidad que quería modificar, de esta manera evitaría tocar los archivos del plugin, sin embargo no localicé ningún Hook.

 

Generalidades

Como no encontré un Hook en el que insertar mi código, terminé modificando un archivo del plugin, pero ahora encontré otro problema y es que el plugin en el futuro podría actualizarse y perdería las modificaciones realizadas.

Una posible solución sería clonar el plugin con otro nombre y así evitar la actualización, sin embargo me decante por evitar que el plugin notifique una actualización y hacer la actualización de manera manual, ya que tendría que hacer la modificación al archivo nuevamente.

En un artículo anterior habíamos visto cómo desactivar las notificaciones de las actualizaciones de WordPress. Sin embargo en este artículo veremos cómo hacerlo para plugins específicos.

Al final lo que quería obtener es algo similar a la siguiente imagen:

Si las modificaciones que realizas aporta al plugin puedes igualmente solicitar esta modificación a los desarrolladores, en mi caso lo hice sugiriendo que agregaran un Hook de filtro.

 

Código para evitar que un plugin notifique actualizaciones

El siguiente código puede ser agregado al final del archivo functions.php del tema o usando algún plugin de Snippets

// Deshabilitar la notificación de actualización de plugins
add_filter( 'site_transient_update_plugins', 'dcms_disable_plugin_update' );
function dcms_disable_plugin_update( $value ) {
	if ( isset($value) && is_object($value) ) {
		// Desactivamos las notificaciones del plugin1
		if ( isset( $value->response['plugin1/plugin1.php'] ) ) {
			unset( $value->response['plugin1/plugin1.php'] );
		}
	}
	return $value;
}
Tienes que reemplazar plugin1/plugin1.php por el nombre de carpeta y nombre del archivo del plugin al que quieres quitar las notificaciones de actualización.

En el código anterior:

  • Usamos el Hook llamado site_transient_update_plugins que hace referencia a la función dcms_disable_plugin_update()
  • Comprobamos que el parámetro $value sea un parámetro válido
  • Evaluamos la clave del array $value que hace referencia al plugin al que queremos quitar las notificaciones
  • Finalmente usamos la función de PHP unset() para quitar ese elemento del array

 

Conclusión

Si quieres evitar la notificación de actualización y que un plugin sea actualizado accidentalmente, entonces puedes evaluar desactivar notificación, de esta manera podrás decidir cuando actualizar manualmente. Esto es especialmente útil, tal como te comenté, cuando has realizado modificaciones a los archivos del plugin.

 

Categorías: Core

Ver comentarios (6)

  • Hola.
    Como siempre muy correcta esta forma de hacerlo.
    Yo hasta ahora lo hacía modificando la versión y poniendo por ejemplo: Version: 9.9.99
    Ya sé que estoy es muy incorrecto, pero funciona.
    Gracias por tus aportaciones.
    Saludos

  • Saludos, el código:

    add_filter( 'site_transient_update_plugins', 'dcms_disable_plugin_update' );
    function dcms_disable_plugin_update( $value ) {
    if ( isset($value) && is_object($value) ) {
    // Desactivamos las notificaciones del plugin1
    if ( isset( $value->response['plugin1/plugin1.php'] ) ) {
    unset( $value->response['plugin1/plugin1.php'] );
    }
    }
    return $value;
    }

    funciona para 1 plugin pero si necesito deshabilitar las notificaciones de dos o tres que modificación debo realizar.

    Gracias.

    • Repite el bloque if
      // Desactivamos las notificaciones del plugin1
      ...
      // Desactivamos las notificaciones del plugin2
      ...
      Puedes hacer varias comprobaciones para distintos plugins en ifs independientes o usando elseif.

      Saludos.