Отключить уведомление об обновлении для отдельных плагинов

49

Есть ли способ отключить уведомления об обновлениях для определенных плагинов?

Как разработчик плагинов, у меня есть несколько плагинов, установленных на моем личном сайте, использующих для тестирования версию транка svn, но те же плагины доступны на сайте плагинов. В этих случаях WP считает последнюю версию самой последней опубликованной версией и постоянно пытается предупредить меня о наличии обновлений.

Я все еще хочу видеть уведомления об обновлениях на других плагинах, но раздражает постоянно игнорировать Updates (2)уведомление в шапке!

Калеб
источник
Просто откройте файл плагина и измените номер версии на что-то вроде 9.9.9
Bainternet
Извините @Bainternet, но это было бы слишком хакерски, потому что сайт является svn-checkout, а плагин взят из svn:externalссылки на код разработки плагина. Наличие локально измененного файла на рабочем сервере не вариант. Фильтр Хамидуллы работает, потому что он сохраняется в хранилище кода для сайта.
Калеб
Да, я пропустил часть о сайте, работающем на SVN
Bainternet
Вы также можете просто использовать плагин Disable Updates Manager от Websiteguy на WordPress.org.
Мэтью

Ответы:

67

Например, если вы не хотите, чтобы Wordpress отображал уведомления об обновлениях для akismet, вы сделаете это следующим образом:

function filter_plugin_updates( $value ) {
    unset( $value->response['akismet/akismet.php'] );
    return $value;
}
add_filter( 'site_transient_update_plugins', 'filter_plugin_updates' );
Хамидулла Хан
источник
1
Я поместил это в конце ./wp-config.php, заменил путь к файлу плагина, и он сделал свою работу.
Калеб
6
Вы можете поместить это в файл functions.php вашей темы, если это невозможно, тогда вы можете поместить его в отдельный файл плагина. На мой взгляд, помещать это в wp-config.php не очень хорошая идея.
Хамидулла Хан
1
Я действительно не хочу, чтобы моя функция была связана с темой, и добавление плагина кажется таким же хакерским, как просто взлом плагина, который у меня есть. Можете ли вы объяснить, почему вы считаете, что wp-config.php не является подходящим местом для размещения специфических для сайта хаков?
Калеб
Очень хорошее решение, которое отлично сработало для меня в functions.php. Легко добавить больше плагинов в список, просто добавив еще один unset () ... Хороший совет, Хамидулла ..
Ларс Коудал
2
Для тех, у кого те же замечания, что и у @Caleb, создайте в папке wp-content новую папку с именем: mu-pluginsи создайте небольшой плагин, который вы добавляете сюда. Чтобы добавить его, как уже упоминалось выше, некоторые из wp-config.phpних абсолютно неуместны.
Чарльз
31

Ответ Хамидуллы Хана вызовет предупреждение PHP. Включите это условие if, чтобы убедиться, что это объект перед отменой ответа для этого плагина.

«Предупреждение: попытка изменить свойство необъекта»

Попробуйте это, чтобы избежать предупреждений (код самого файла плагина):

// remove update notice for forked plugins
function remove_update_notifications($value) {

    if ( isset( $value ) && is_object( $value ) ) {
        unset( $value->response[ plugin_basename(__FILE__) ] );
    }

    return $value;
}
add_filter( 'site_transient_update_plugins', 'remove_update_notifications' );

Мне нравится вставлять это в настоящий плагин. Поскольку я когда-либо отключал обновления только для плагина, потому что я редактировал или разветвлял код и не хочу терять свои изменения при обновлении, я уже отредактировал плагин и, таким образом, не против редактировать его больше. Это держит мой файл функций немного чище. Но если вы хотите поместить его в файл функций, и выгода от этого метода заключается в том, что вы можете удалить несколько плагинов из обновлений, добавив еще одну неустановленную строку для этого плагина, например, так (код для functions.php):

// remove update notice for forked plugins
function remove_update_notifications( $value ) {

    if ( isset( $value ) && is_object( $value ) ) {
        unset( $value->response[ 'hello.php' ] );
        unset( $value->response[ 'akismet/akismet.php' ] );
    }

    return $value;
}
add_filter( 'site_transient_update_plugins', 'remove_update_notifications' );
circlecube
источник
Спасибо за это. У меня были проблемы с использованием этого кода непосредственно внутри плагинов, казалось, что все в порядке, когда это был один плагин, но как только я сделал это с другими (имена diff func), я потерял уведомления для всех плагинов и ссылку «Просмотр деталей» для плагинов wp-repo также исчез. Использование ваших проверок, но размещение в моей теме functions.php было более надежным без вмешательства уведомлений об обновлениях для других плагинов. Наконец, отсутствие плагина имеет то преимущество, что ему не нужно, чтобы этот плагин был активным, чтобы он работал. Отключение плагина с этим кодом, очевидно, снова приведет к уведомлению об обновлении.
Филипп Ингрэм
2

Отключить все уведомления об обновлениях с кодом

function remove_core_updates(){
        global $wp_version;return(object) array('last_checked'=> time(),'version_checked'=> $wp_version,);
    }
    add_filter('pre_site_transient_update_core','remove_core_updates');
    add_filter('pre_site_transient_update_plugins','remove_core_updates');
    add_filter('pre_site_transient_update_themes','remove_core_updates');

Код отключит уведомления об обновлениях для ядра WordPress, плагинов и тем.

Супер модель
источник
«отдельные плагины» - это ключ
Гангеш
@Gangesh, я думаю, что он хочет отключить уведомления некоторых конкретных плагинов
Super Model