Отключение автоматической проверки обновлений в WordPress
WordPress автоматически проверяет наличие обновлений для самой системы, всех установленных тем и плагинов. Это создает раздражающую задержку при загрузке (любой) страницы WordPress. Хотя это происходит только раз в день и последующие загрузки страниц не вызывают проверки, задержка настолько велика, что заставляет задуматься, стоит ли вообще открывать первую страницу (особенно если нужно сделать что-то быстро, а не работать в WordPress целый день).
Я все равно обновляю систему лишь время от времени и предпочитаю делать это вручную, поэтому создал плагин для удаления кнопки Обновления из панели администратора. Я думал, что это решит проблему, но оказалось, что кнопка просто скрывается, а сама проверка все равно выполняется в фоновом режиме.
Все остальные программы в мире позволяют отключать автоматические обновления, поэтому я ожидал, что в WordPress тоже должна быть такая возможность, но если она и есть, то слишком хорошо спрятана.
Когда я попытался найти решение, все найденные вопросы касались обратного - как заставить автоматические обновления действительно применяться (а не просто проверяться).
Как можно отключить автоматическую проверку обновлений в WordPress?

Это сработало для меня, чтобы отключить проверку на локальном сервере - что было очень раздражающим, так как он находится за фаерволом и время ожидания было слишком большим.
define( 'WP_HTTP_BLOCK_EXTERNAL', true );
define( 'AUTOMATIC_UPDATER_DISABLED', true );
define( 'WP_AUTO_UPDATE_CORE', false );
Обратите внимание, что я не уверен, необходимо ли отключать WP_HTTP_BLOCK_EXTERNAL. Я не рекомендую отключать это на сервере, которому требуется взаимодействие с другими серверами.

Как отключить автоматические обновления ядра, но оставить их для плагинов и тем
Если вы хотите остановить автоматические обновления ядра WordPress, но оставить их для плагинов и/или тем, добавьте следующие строки в файл wp-config.php: Отключение автоматических обновлений ядра:
define( 'WP_AUTO_UPDATE_CORE', false );
Затем включите обновления для плагинов и тем:
add_filter( 'auto_update_plugin', '__return_true' );
add_filter( 'auto_update_theme', '__return_true' );
Как полностью отключить автоматические обновления WordPress
Если вы хотите полностью отключить автоматические обновления WordPress, откройте файл wp-config.php и добавьте в него эту строку:
define( 'AUTOMATIC_UPDATER_DISABLED', true );

Следующий код отключит автоматическую проверку обновлений в админке WordPress.
Вы можете добавить его в файл functions.php
вашей темы.
remove_action('admin_init', '_maybe_update_core');
remove_action('admin_init', '_maybe_update_plugins');
remove_action('admin_init', '_maybe_update_themes');

Хорошо, вот решение, которое удаляет доступные обновления и также предотвращает проверку обновлений.
Это решение предполагает использование PHP > 5.3 (поскольку в нем используются анонимные функции)
Часть 1) Очищает все существующие обновления:
add_filter( 'site_transient_update_plugins',
function ( $oUpdatesResult ) {
if ( ! is_object( $oUpdatesResult ) ) {
$oUpdatesResult = new stdClass();
}
$oUpdatesResult->response = array();
return $oUpdatesResult;
},
PHP_INT_MAX
);
Часть 2) Предотвращает отправку HTTP-запроса, который выполняет фактическую проверку:
add_filter( 'pre_http_request',
function ( $bFalse, $aReqParams, $sUrl ) {
if ( strpos( $sUrl, '//api.wordpress.org/plugins/update-check/1.1/' ) ) {
$bFalse = null;
}
return $bFalse;
},
PHP_INT_MAX,
3
);
Важные замечания:
- WordPress проверяет обновления только при загрузке определенных страниц в админке, таких как страница плагинов или страница обновлений, так что вы не получите реального прироста производительности.
- Это работает только для плагинов. Для тем повторите то же самое, заменив "plugin" на "theme" в названии фильтра и URL.
- Вы можете добавить этот код в файл function.php вашей темы.

Марк Ярквит уже писал об этом в своем блоге некоторое время назад. По сути, этот код просто отклоняет запросы к публичным SVN-репозиториям на wp dot org через фильтры WP HTTP API.
Для плагинов (должен быть размещен внутри плагина):
add_filter( 'http_request_args', 'wpse_102554_deny_plugin_updates', 5, 2 );
function wpse_102554_deny_plugin_updates( $r, $url )
{
if ( 0 !== strpos( $url, 'http://api.wordpress.org/plugins/update-check' ) )
return $r;
$plugins = unserialize( $r['body']['plugins'] );
unset(
$plugins->plugins[ plugin_basename( __FILE__ ) ],
$plugins->active[ array_search( plugin_basename( __FILE__ ), $plugins->active ) ]
);
$r['body']['plugins'] = serialize( $plugins );
return $r;
}
Для тем (должен быть размещен в файле functions.php
темы и работает только для текущей активной темы):
add_filter( 'http_request_args', 'wpse_102554_deny_theme_updates', 5, 2 );
function wpse_102554_deny_theme_updates( $r, $url )
{
if ( 0 !== strpos( $url, 'http://api.wordpress.org/themes/update-check' ) )
return $r;
$themes = unserialize( $r['body']['themes'] );
unset(
$themes[ get_option( 'template' ) ],
$themes[ get_option( 'stylesheet' ) ]
);
$r['body']['themes'] = serialize( $themes );
return $r;
}
Джон Блэкберн написал плагин для отключения обновлений тем.

Я думаю, что сниппеты не будут работать. Начиная с WordPress 3.7 API работает со строкой JSON. Функция serialize
не может работать с JSON, используйте в качестве альтернативы json_decode
и json_encode
. Полный исходный код можно посмотреть в этом gist - https://gist.github.com/bueltge/5a3545ada7e68d367424
