Мне нравится эта функция, но я не хочу, чтобы все мои плагины обновлялись автоматически. Как я могу разрешить автоматическое обновление некоторых плагинов, исключая те, которые я хочу сделать вручную?
Вместо использования кода из вопроса в functions.php замените его следующим:
/**
* Prevent certain plugins from receiving automatic updates, and auto-update the rest.
*
* To auto-update certain plugins and exclude the rest, simply remove the "!" operator
* from the function.
*
* Also, by using the 'auto_update_theme' or 'auto_update_core' filter instead, certain
* themes or Wordpress versions can be included or excluded from updates.
*
* auto_update_$type filter: applied on line 1772 of /wp-admin/includes/class-wp-upgrader.php
*
* @since 3.8.2
*
* @param bool $update Whether to update (not used for plugins)
* @param object $item The plugin's info
*/function exclude_plugins_from_auto_update( $update, $item ){return(! in_array( $item->slug, array('akismet','buddypress',)));}
add_filter('auto_update_plugin','exclude_plugins_from_auto_update',10,2);
Этот код можно легко настроить для настройки темы и обновлений ядра.
Статистика обновлений плагинов и тем была добавлена в Wordpress 3.8.2 ( 27905 ). Вышеупомянутая функция использует слаг для идентификации плагинов, но вы можете использовать любую информацию об объекте (в $ item):
@kaiser Хорошая идея с сокращением кода. Прошло некоторое время с тех пор, как я посмотрел на это, но на первый взгляд кажется, что это переворачивает логику. Вы проверяли это? Похоже, что элементы в массиве теперь единственные, которые будут обновляться автоматически, а все остальное будет исключено.
Дэвид
Дэвид, ты был совершенно прав: исправлено и + 1ed
kaiser
3
Обратите внимание, что начиная с WordPress 3.8.2 тип элемента плагина, переданного этой функции, изменился, и теперь он является объектом.
/**
* @package Plugin_Filter
* @version 2.0
*//*
Plugin Name: Plugin Filter
Plugin URI: http://www.brideonline.com.au/
Description: Removes certain plugins from being updated.
Author: Ben Wise
Version: 2.0
Author URI: https://github.com/WiseOwl9000
*//**
* @param $update bool Ignore this it just is set to whether the plugin should be updated
* @param $plugin object Indicates which plugin will be upgraded. Contains the directory name of the plugin followed by / followed by the filename containing the "Plugin Name:" parameters.
*/function filter_plugins_example($update, $plugin){
$pluginsNotToUpdate[]="phpbb-single-sign-on/connect-phpbb.php";// add more plugins to exclude by repeating the line above with new plugin folder / plugin fileif(is_object($plugin)){
$pluginName = $plugin->plugin;}else// compatible with earlier versions of wordpress{
$pluginName = $plugin;}// Allow all plugins except the ones listed above to be updatedif(!in_array(trim($pluginName),$pluginsNotToUpdate)){// error_log("plugin {$pluginName} is not in list allowing");returntrue;// return true to allow update to go ahead}// error_log("plugin {$pluginName} is in list trying to abort");returnfalse;}// Now set that function up to execute when the admin_notices action is called// Important priority should be higher to ensure our plugin gets the final say on whether the plugin can be updated or not.// Priority 1 didn't work
add_filter('auto_update_plugin','filter_plugins_example',20/* priority */,2/* argument count passed to filter function */);
Мне нравится ваш ответ, но было бы здорово, если бы вы могли добавить документацию, чтобы поддержать его для дальнейшего чтения. Спасибо
Питер Гусен
Единственная ссылка, которую я мог найти в кодексе на управление обновлениями плагинов, находится здесь: codex.wordpress.org/… Я не смог найти ничего в каких-либо журналах изменений, чтобы поддержать изменение объекта вместо передаваемой строки.
WiseOwl9000
Я отредактировал / обновил свой ответ, чтобы учесть изменения. Вот набор
Обратите внимание, что начиная с WordPress 3.8.2 тип элемента плагина, переданного этой функции, изменился, и теперь он является объектом.
Объект $ plugin имеет следующее:
источник