Evitar que un plugin se actualice en WordPress

20 de septiembre de 2020

La regla es que no deberías evitar que un plugin se actualice en WordPress. Pero toda regla tiene su excepción y, en ocasiones, puede ser la única solución viable.

Ya sabes, las actualizaciones:

  • resuelven problemas de seguridad,
  • solucionan errores de funcionamiento,
  • mejoran la usabilidad,
  • mejoran el rendimiento,
  • ajustan el código a los nuevos tiempos,

En particular me pongo en el caso de que, un plugin ha evolucionado pero el grueso del sistema no, lo que hace que no funcione, o que impida el funcionamiento de otros componentes o incluso de todo el sistema.

Y con sistema me refiero a la aplicación web, o incluso a la parte relativa al servidor.

No tiene sentido impedir la actualización de todos los plugin, porque probablemente estarías provocando un enorme agujero de seguridad a corto, medio, o largo plazo. Entonces, lo que necesitamos es, impedir que el plugin problemático sea actualizado.

He encontrado varios métodos propuestos en stackoverflow.

Usando filtros desde functions.php.

El primero quita el plugin de la lista de plugins para los que se quiere comprobar si hay actualización. Como no se comprueba, no propone actualizaciones

// remove update notice for forked plugins
function remove_update_notifications( $value ) {
  if ( isset( $value ) && is_object( $value ) ) {
    unset( $value->response[ 'mi_plugin/mi_plugin.php' ] );
  }
  return $value;
}
add_filter( 'site_transient_update_plugins', 'remove_update_notifications' );
Lenguaje del código: PHP (php)

Otra versión, más simplificada:

function remove_plugin_updates( $value ) {
   if( isset( $value->response['mi_plugin/mi_plugin.php'] ) ) {        
      unset( $value->response['mi_plugin/mi_plugin.php'] );
    }
    return $value;
 }
 add_filter( 'site_transient_update_plugins', 'remove_plugin_updates' );
Lenguaje del código: PHP (php)

Modificando el código del plugin.

En el siguiente caso, tenemos que añadir código al plugin, de manera que evitamos que éste compruebe si es actualizable eliminándolo de la petición a la API de wordpress.org.

function prevent_plugin_update_check( $req, $url ) {
  if ( 0 === strpos( $url, 'http://api.wordpress.org/plugins/update-check/' ) ) {
    $my_plugin = plugin_basename( __FILE__ );
    $plugins = unserialize( $req['body']['plugins'] );
    unset( $plugins->plugins[$my_plugin] );
    unset( $plugins->active[array_search( $my_plugin, $plugins->active )] );
    $r['body']['plugins'] = serialize( $plugins );
  }
  return $req;
}
add_filter( 'http_request_args', 'prevent_plugin_update_check', 10, 2 );
Lenguaje del código: PHP (php)

Y un último método, que creo que es el que menos me convence, se trata de cambiar la versión en el comentario de la cabecera del plugin a una muy superior a la actual, de modo que cuando WordPress quiera comprobar si hay actualizaciones, nunca encuentre una versión superior a la instalada.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.