Eklentilerin otomatik olarak güncellenmesini nasıl hariç tutarım?


16

Sitemdeki tüm eklentilerin otomatik güncellemeler almasına izin veren bir isteğe bağlı filtre var:

add_filter( 'auto_update_plugin', '__return_true' );

Bu özelliği seviyorum, ancak tüm eklentilerimin otomatik olarak güncellenmesini istemiyorum. Manuel olarak yapmak istediklerimi hariç tutarken bazı eklentilerin otomatik olarak güncellenmesine nasıl izin verebilirim?

Yanıtlar:


20

Function.php'deki sorudaki kodu kullanmak yerine, bununla değiştirin:

/**
 * 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 );

Bu kod, tema ve temel güncellemeleri de özelleştirmek için kolayca değiştirilebilir.

Eklenti ve tema güncelleme istatistikleri Wordpress 3.8.2'ye ( 27905 ) eklendi. Yukarıdaki işlev eklentileri tanımlamak için slug öğesini kullanır, ancak nesnenin herhangi bir bilgisini kullanabilirsiniz ($ item):

[id] => 15
[slug] => akismet
[plugin] => akismet/akismet.php
[new_version] => 3.0.0
[url] => https://wordpress.org/plugins/akismet/
[package] => https://downloads.wordpress.org/plugin/akismet.3.0.0.zip

Wordpress 3.8.1 ve önceki sürümler için bu işlevi kullanın:

function exclude_plugins_from_auto_update( $update, $item ) {
    return ( ! in_array( $item, array(
        'akismet/akismet.php',
        'buddypress/bp-loader.php',
    ) ) );
}
add_filter( 'auto_update_plugin', 'exclude_plugins_from_auto_update', 10, 2 );

Sahne, WP 3.8.2 ile değişikliği belirtmek için @ WiseOwl9000'e gider


@kaiser Kodu yoğunlaştırmak için güzel bir fikir. Buna baktığımdan beri biraz oldu, ama ilk bakışta bunun mantığı tersine çevirdiği anlaşılıyor. Bunu test ettin mi? Dizideki öğelerin artık otomatik olarak güncellenecek tek öğeler olduğu ve diğer her şeyin hariç tutulacağı anlaşılıyor.
David

David, tamamen haklıydın: Sabit ve + 1ed
kaiser

3

WordPress 3.8.2'den itibaren bu işleve iletilen eklenti öğesinin türü değişti ve şimdi bir nesne.

/**
 * @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 file

    if (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 updated
    if (!in_array(trim($pluginName),$pluginsNotToUpdate))
    {
        // error_log("plugin {$pluginName} is not in list allowing");
        return true; // return true to allow update to go ahead
    }

    // error_log("plugin {$pluginName} is in list trying to abort");
    return false;
}

// 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  */);

$ Plugin nesnesi aşağıdakilere sahiptir:

stdClass Object
(
    [id] => 10696
    [slug] => phpbb-single-sign-on
    [plugin] => phpbb-single-sign-on/connect-phpbb.php
    [new_version] => 0.9
    [url] => https://wordpress.org/plugins/phpbb-single-sign-on/
    [package] => https://downloads.wordpress.org/plugin/phpbb-single-sign-on.zip
)

Cevabınızı beğendim, ancak daha fazla okuma için bunu destekleyecek belgeler ekleyebilmeniz harika olurdu. Teşekkürler
Pieter Goosen

Eklenti güncellemelerini kontrol etmek için codex içinde bulabildiğim tek referans burada: codex.wordpress.org/… Bir dize geçirilmesi yerine bir nesnede değişikliği desteklemek için herhangi bir değişiklik günlüklerinde hiçbir şey bulamadım.
WiseOwl9000

Değişikliği hesaba katmak için cevabımı düzenledim / güncelledim. Aradığınız değişiklik kümesi
David
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.