Skip to content

Bloquear actualizaciones en WordPress y sin penalizar el rendimiento

En cada actualización de WordPress puede surgir alguna incompatibilidad. Por este motivo se suele bloquear las actualizaciones para evitar una actualización accidental, o hecha por un usuario que no conoce los detalles de la instalación (osea, el cliente :P)

Existe un código que está muy propagado por internet:

1
2
3
4
5
6
7
8
9
10
11
12
13
//Disable Theme Updates # 3.0+
remove_action( 'load-update-core.php', 'wp_update_themes' );
add_filter( 'pre_site_transient_update_themes', create_function( '$a', "return null;" ) );
wp_clear_scheduled_hook( 'wp_update_themes' );

//Disable Plugin Updates #3.0+
remove_action( 'load-update-core.php', 'wp_update_plugins' );
add_filter( 'pre_site_transient_update_plugins', create_function( '$a', "return null;" ) );
wp_clear_scheduled_hook( 'wp_update_plugins' );

//Diasable Core Updates # 3.0+
add_filter( 'pre_site_transient_update_core', create_function( '$a', "return null;" ) );
wp_clear_scheduled_hook( 'wp_version_check' );

Este código funciona pero hay un problema, que empeora el rendimiento de wordpress. Casi multiplica por 4 los tiempos de respuesta.

Sucede porque la función que se crea para engañar al sistema devuelve un valor “null”, así WordPress cree que no hay ninguna actualización. Pero como no sabe cuando se hizo la comprobación ni cual fué la última versión ni nada (porque es un null), vuelve a conectar a wordpress.org para comprobar datos. Es decir, que cada click que se hace en el sitio hace que nuestro WordPress vuelva a consultar a wordpress.org. Una perdida de tiempo.

Un forma más adecuada de hacer este “hack” o bloqueo es la siguiente:

1
2
3
4
5
6
7
8
9
10
function custom_fake_check_version($a) {
    global $wp_version;
    return (object) array(
        'last_checked' => time(),
        'version_checked' => $wp_version,
    );
}
add_filter('pre_site_transient_update_core',    'custom_fake_check_version');
add_filter('pre_site_transient_update_plugins', 'custom_fake_check_version');
add_filter('pre_site_transient_update_themes',  'custom_fake_check_version');

Es lo mismo que lo anterior, salvo que en lugar de devolver un “null” le estamos diciendo al sistema que la última vez que se comprobó la versión fue “ahora mismo” y que la versión es “la versión actual”. Por lo tanto, WordPress no volverá a consultar ese dato en los servidores de wordpress.org hasta que se eliminen estos filtros.


Leave a Reply