ฉันจะแยกปลั๊กอินออกจากการอัปเดตอัตโนมัติได้อย่างไร


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 ) ฟังก์ชั่นด้านบนใช้กระสุนเพื่อระบุปลั๊กอิน แต่คุณสามารถใช้ข้อมูลใด ๆ ของวัตถุ (ในรายการ $):

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

อุปกรณ์ประกอบฉากไปที่ @ WiseOwl9000 สำหรับชี้การเปลี่ยนแปลงด้วย WP 3.8.2


@kaiser คิดดีกับการย่อรหัส มันดูประหม่ามาตั้งแต่ฉันดูเรื่องนี้ แต่ในแวบแรกดูเหมือนว่านี่จะเป็นการขัดกับตรรกะ คุณทดสอบสิ่งนี้หรือไม่? ดูเหมือนว่ารายการในอาร์เรย์จะเป็นรายการเดียวที่จะได้รับการอัปเดตอัตโนมัติและทุกอย่างจะถูกยกเว้น
David

เดวิดคุณพูดถูกแล้ว: คงที่และ +1 แล้ว
ไกเซอร์

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
)

ฉันชอบคำตอบของคุณ แต่มันจะดีถ้าคุณสามารถเพิ่มเอกสารเพื่อสนับสนุนการอ่านเพิ่มเติม ขอบคุณ
Pieter Goosen

การอ้างอิงเดียวที่ฉันพบใน codex เพื่อควบคุมการปรับปรุงปลั๊กอินอยู่ที่นี่: codex.wordpress.org/ ...... ฉันไม่พบสิ่งใดในบันทึกการเปลี่ยนแปลงเพื่อรองรับการเปลี่ยนแปลงวัตถุแทนที่จะเป็นสตริงที่ส่งผ่าน
WiseOwl9000

ฉันแก้ไข / อัพเดทคำตอบของฉันในบัญชีสำหรับการเปลี่ยนแปลง นี่คือเซ็ตการแก้ไขที่คุณกำลังค้นหา: core.trac.wordpress.org/changeset/27905
เดวิด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.