플러그인이 자동 업데이트되지 않도록 제외하려면 어떻게해야합니까?


16

내 사이트의 모든 플러그인이 자동 업데이트를 받도록 허용하는 옵트 인 필터가 있습니다.

add_filter( 'auto_update_plugin', '__return_true' );

이 기능이 마음에 들지만 모든 플러그인이 자동으로 업데이트되는 것을 원하지 않습니다. 수동으로 수행하려는 플러그인을 제외하고 일부 플러그인이 자동으로 업데이트되도록하려면 어떻게해야합니까?

답변:


20

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)를 사용할 수 있습니다.

[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 이하의 경우이 기능을 대신 사용하십시오.

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

WP 3.8.2로 변경 사항을 지적하기 위해 소품은 @ WiseOwl9000으로 이동하십시오.


@kaiser 코드를 압축하는 것이 좋습니다. 내가 이것을 본 이후에는 시간이 오래 걸렸지 만 언뜻 보면 이것이 논리를 뒤집는 것처럼 보입니다. 이것을 테스트 했습니까? 배열의 항목은 이제 자동 업데이트되는 유일한 항목이며 다른 모든 항목은 제외됩니다.
David

David, 당신은 완전히 옳았습니다 : 고정 및 +1
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 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 객체는 다음과 같습니다.

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
)

나는 당신의 대답을 좋아하지만 더 읽을 수 있도록 문서를 추가 할 수 있다면 좋을 것입니다. 감사합니다
피터 구센

플러그인 업데이트 제어에 대한 코덱스에서 찾을 수있는 유일한 참조는 다음과 같습니다. codex.wordpress.org/… 문자열이 전달되는 대신 객체 변경을 지원하기 위해 변경 로그에서 아무것도 찾을 수 없습니다.
WiseOwl9000

변경 사항에 대한 답변을 편집 / 업데이트했습니다. 찾고있는 변경 세트는 다음과 같습니다. core.trac.wordpress.org/changeset/27905
David
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.