Отключение автоматического обновления для отдельного плагина
У меня есть плагин, который я точно не хочу обновлять. Я понимаю, что это не лучшая практика, но в данном случае это необходимо. Есть ли способ отключить уведомления WordPress об автоматическом обновлении для конкретного плагина (но при этом сохранить обычные оповещения для всех остальных плагинов).

добавьте это в functions.php вашей темы
// Отключение уведомлений об обновлениях для отдельных плагинов - см. мой пример с плагином block-spam-by-math-reloaded, как использовать эту функцию
function filter_plugin_updates( $value ) {
unset( $value->response['plugin-folder-name/plugin-file-name.php'] );
return $value;
}
add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );

Я не понимаю, почему в вашем ответе есть код кнопки Google +1... Наверное, осталось с прошлого раза...

Это решение вызывает предупреждение при включении или отключении любого другого плагина. Warning: Attempt to modify property of non-object in /home/XXXXXX/public_html/wp-content/themes/XXXXXXX/custom-functions.php on line 15

Хотя ответ Тары работает хорошо, он требует от программиста указания пути к основному файлу плагина и функционирует только при активной конкретной теме. Альтернативное решение может выглядеть так:
add_filter('site_transient_update_plugins', 'remove_update_notification_1234');
function remove_update_notification_1234($value) {
unset($value->response[ plugin_basename(__FILE__) ]);
return $value;
}
однострочная версия:
add_filter('site_transient_update_plugins', function ($value) { unset($value->response[ plugin_basename(__FILE__) ]);return $value; });
Поместите этот код в начало основного файла .php
плагина, для которого хотите отключить обновления. Если вы планируете использовать этот код несколько раз на своём сайте, измените _1234
в названии фильтра и функции на другой набор случайных чисел, чтобы избежать дублирования имён функций.
Скорее всего, если вы отключаете обновления для конкретного плагина, это означает, что вы его редактируете по какой-то причине... поэтому добавление нескольких строк в этот плагин должно быть приемлемым решением.

Я получал предупреждения PHP, как упомянул 'gurung' выше, при установке или обновлении других плагинов, когда использовал этот код. Я видел эти предупреждения в WP 4.3.1.
Я нашел несколько других постов на stackexchange по этой проблеме и создал функцию, которая проходит по массиву ссылок на плагины и сначала проверяет, есть ли уже ссылка на этот плагин (чтобы избежать предупреждения PHP о не-объектах, если ссылки нет), и если объект существует, то он будет удален, как в исходном коде.
Я не проводил модульное тестирование, но получал предупреждения PHP при каждом обновлении/установке плагинов, а теперь их не вижу.
function filter_plugin_updates( $value ) {
// Добавьте ссылки на плагины, для которых хотите отключить уведомления об обновлениях, в массив $plugins
$plugins = array(
'k-elements/setup.php'
);
foreach( $plugins as $plugin ) {
if ( isset( $value->response[$plugin] ) ) {
unset( $value->response[$plugin] );
}
}
return $value;
}
add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );

Мне достался сайт с реализацией кода от Тары через NPC, которая вызывала ошибки, как отметил Гурунг. Это сводило меня с ума. Я не решался редактировать код в плагине, пока не понял, что этот сниппет и так кастомный.
Чтобы устранить ошибки, замените это:
unset($value->response[ plugin_basename(__FILE__) ]);
на это:
if($value) {
unset($value->response[ plugin_basename(__FILE__) ]);
}
Для кого-то это может быть очевидно, но ключевой момент в том, что код уже кастомный, поэтому его можно редактировать, и скорее всего он не перезапишется при обновлениях, ведь вся суть в том, чтобы предотвратить обновление плагина.

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

Лучше указывать более высокую версию в основном файле плагина, но только при добавлении специального хака. Он вызывает неопределённый/нулевой номер версии и затем остаётся в этой версии навсегда. Пример:
Version:
Это гарантирует, что даже в 2100 году плагин не обновится после версии 9.9.9 или подобной. Это простой подход для заброшенных плагинов, которые когда-нибудь будут заменены.
