網(wǎng)站安全是現(xiàn)代網(wǎng)站不可或缺的一部分。強(qiáng)烈建議通過(guò)運(yùn)行最新版本的WordPress、PHP和任何已安裝的插件或主題來(lái)使網(wǎng)站保持最新,這是使網(wǎng)站免受任何已知安全漏洞威脅的簡(jiǎn)便方法。
默認(rèn)情況下,WordPress本身配置為在有新的次要版本可用時(shí)自動(dòng)更新。盡管自動(dòng)更新插件和主題的代碼已經(jīng)存在內(nèi)核中很久了,但網(wǎng)站所有者很少使用它,因?yàn)樗枰褂眠^(guò)濾器掛鉤。
今年2月,開發(fā)人員創(chuàng)建了一個(gè)功能插件,以探索引入一個(gè)用戶界面,使站點(diǎn)管理員可以輕松地從儀表板輕松管理插件和主題自動(dòng)更新。在GitHub存儲(chǔ)庫(kù)上進(jìn)行5個(gè)月的開發(fā)、用戶反饋(該插件可在WordPress.org插件目錄上找到)、測(cè)試(包括1000多個(gè)活動(dòng)安裝)以及由#core-auto-updates團(tuán)隊(duì)的貢獻(xiàn)者進(jìn)行迭代,此功能插件合并到內(nèi)核中,并將在WordPress 5.5中發(fā)布。

這些新控件將使網(wǎng)站所有者能夠以更少的時(shí)間和精力來(lái)保持其網(wǎng)站的最新性和安全性。
注意:插件和主題自動(dòng)更新默認(rèn)情況下處于禁用狀態(tài)。管理員和網(wǎng)站所有者需要啟用此功能才能接收自動(dòng)插件和主題更新。但是,當(dāng)有新更新可用時(shí),插件和主題的語(yǔ)言包將始終自動(dòng)更新。新界面不會(huì)調(diào)整語(yǔ)言包更新。
默認(rèn)情況下,所有具有update_plugins和update_themes功能的用戶都可以分別切換插件和主題的自動(dòng)更新。在多站點(diǎn)安裝中,只有網(wǎng)絡(luò)管理員才具有此功能,并且僅在網(wǎng)絡(luò)儀表板的上下文中才具有。
為插件作者和WordPress開發(fā)人員提供了許多掛鉤,方便自定義新功能以滿足他們的需求。讓我們看一下可用的函數(shù)和掛鉤,以及如何使用它們來(lái)定制插件和主題自動(dòng)更新體驗(yàn)。
新函數(shù):wp_is_auto_update_enabled_for_type()
此函數(shù)指示是否為給定類型啟用自動(dòng)更新。接受的兩種類型是theme和plugin。
// 檢查是否為插件啟用了自動(dòng)更新
$plugin_auto_updates_enabled = wp_is_auto_update_enabled_for_type( 'plugin' );
禁用自動(dòng)更新用戶界面元素
如果需要,可以禁用新的界面元素。返回false到plugins_auto_update_enabled和themes_auto_update_enabled過(guò)濾器將分別禁用插件、主題的用戶界面元素。默認(rèn)情況下,它們是啟用的(true)。
注意:這不會(huì)啟用或禁用自動(dòng)更新。它控制是否顯示用戶界面元素。
以下代碼段將禁用插件和主題自動(dòng)更新的界面元素:
// 禁用插件自動(dòng)更新的界面元素
add_filter( 'plugins_auto_update_enabled', '__return_false' );
// 禁用主題自動(dòng)更新的界面元素
add_filter( 'themes_auto_update_enabled', '__return_false' );
修改自動(dòng)更新操作鏈接
有時(shí),插件或主題可能需要自己管理更新。當(dāng)它們不在WordPress.org目錄中托管時(shí),這很常見。對(duì)于這些實(shí)例,有適當(dāng)?shù)倪^(guò)濾器,因此插件和主題作者可以在某些位置修改與自動(dòng)更新相關(guān)的HTML輸出。
插件屏幕:?jiǎn)握军c(diǎn)和多站點(diǎn)
使用plugin_auto_update_setting_html過(guò)濾器,可以過(guò)濾自動(dòng)更新列的內(nèi)容,包括切換鏈接和直到下一次嘗試更新的時(shí)間。
該過(guò)濾器通過(guò)插件的自動(dòng)更新列的默認(rèn)生成的HTML內(nèi)容,帶有兩個(gè)附加參數(shù):
$plugin_file:相對(duì)于插件目錄的主插件文件的路徑。$plugin_data:插件數(shù)據(jù)數(shù)組。
例如,假設(shè)“我的插件”插件希望防止切換自動(dòng)更新,并且其相對(duì)于插件目錄的路徑為my-plugin/my-plugin.php。以下示例將更改該插件的“自動(dòng)更新”列中顯示的內(nèi)容:
function myplugin_auto_update_setting_html( $html, $plugin_file, $plugin_data ) {
if ( 'my-plugin/my-plugin.php' === $plugin_file ) {
$html = __( 'Auto-updates are not available for this plugin.', 'my-plugin' );
}
return $html;
}
add_filter( 'plugin_auto_update_setting_html', 'myplugin_auto_update_setting_html', 10, 3 );
結(jié)果如下:

以下是默認(rèn)的HTML內(nèi)容,以供參考:
<a href="…" class="toggle-auto-update" data-wp-action="…">
<span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span>
<!-- The following text is replaced with "Disable auto-updates" when auto-updates are already enabled for this plugin -->
<span class="label">Enable auto-updates</span>
</a>
主題屏幕:僅單個(gè)站點(diǎn)
由于此屏幕是使用JavaScript模板呈現(xiàn)的,因此為主題屏幕篩選自動(dòng)更新的HTML內(nèi)容會(huì)有些棘手。但是,可以使用theme_auto_update_setting_template過(guò)濾器插入此屏幕并返回修改后的內(nèi)容$template(“主題”頁(yè)面上用于每個(gè)主題的渲染模板)。
注意:由于此模板用于頁(yè)面上的每個(gè)主題,因此強(qiáng)烈建議使用條件語(yǔ)句來(lái)檢查目標(biāo)主題。這可以通過(guò)利用data.id JS參數(shù)(包含主題塊)來(lái)完成。
有關(guān)主題data對(duì)象可用屬性的完整文檔,請(qǐng)參見wp_prepare_themes_for_js() DevHub頁(yè)面。
以下示例將替換my-theme和twentytwenty主題的文本自動(dòng)更新HTML內(nèi)容:
function myplugin_auto_update_setting_template( $template ) {
$text = __( 'Auto-updates are not available for this theme.', 'my-plugin' );
return "<# if ( [ 'my-theme', 'twentytwenty' ].includes( data.id ) ) { #>
<p>$text</p>
<# } else { #>
$template
<# } #>";
}
add_filter( 'theme_auto_update_setting_template', 'myplugin_auto_update_setting_template' );
結(jié)果如下:

以下是默認(rèn)的模板輸出:
<div class="theme-autoupdate">
<# if ( data.autoupdate ) { #>
<a href="{{{ data.actions.autoupdate }}}" class="toggle-auto-update" data-slug="{{ data.id }}" data-wp-action="disable">
<span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span>
<span class="label">' . __( 'Disable auto-updates' ) . '</span>
</a>
<# } else { #>
<a href="{{{ data.actions.autoupdate }}}" class="toggle-auto-update" data-slug="{{ data.id }}" data-wp-action="enable">
<span class="dashicons dashicons-update spin hidden" aria-hidden="true"></span>
<span class="label">' . __( 'Enable auto-updates' ) . '</span>
</a>
<# } #>
<# if ( data.hasUpdate ) { #>
<# if ( data.autoupdate ) { #>
<span class="auto-update-time">
<# } else { #>
<span class="auto-update-time hidden">
<# } #>
<br />' . wp_get_auto_update_message() . '</span>
<# } #>
<div class="notice notice-error notice-alt inline hidden"><p></p></div>
</div>
主題屏幕:僅適用于多站點(diǎn)
在多站點(diǎn)安裝中,“主題”屏幕的修改方式可以與上述“插件”屏幕類似。使用theme_auto_update_setting_html過(guò)濾器,可以過(guò)濾自動(dòng)更新列的內(nèi)容,包括切換鏈接和到下一次更新的時(shí)間。
此過(guò)濾器將通過(guò)帶有兩個(gè)其他參數(shù)的主題的自動(dòng)更新列的默認(rèn)生成的HTML內(nèi)容傳遞:
$stylesheet:主題(或子主題)的目錄名稱。$theme:完整的WP_Theme對(duì)象。
例如,假設(shè)一個(gè)多站點(diǎn)網(wǎng)絡(luò)的網(wǎng)絡(luò)管理員希望禁止自動(dòng)更新“Twenty Twenty”主題。以下示例將更改該主題的“自動(dòng)更新”列中顯示的內(nèi)容:
function myplugin_theme_auto_update_setting_html( $html, $stylesheet, $theme ) {
if ( 'twentytwenty' === $stylesheet ) {
$html = __( 'Auto-updates are not available for this theme.', 'my-plugin' );
}
return $html;
}
add_filter( 'theme_auto_update_setting_html', 'myplugin_theme_auto_update_setting_html', 10, 3 );
全部自動(dòng)更新
如果開發(fā)人員希望為所有插件和/或主題(包括將來(lái)安裝的任何插件)啟用自動(dòng)更新,則可以使用auto_update_plugin/ auto_update_theme過(guò)濾器。
// 啟用所有插件自動(dòng)更新
add_filter( 'auto_update_plugin', '__return_true' );
// 啟用所有主題自動(dòng)更新
add_filter( 'auto_update_theme', '__return_true' );
注意: 使用這些過(guò)濾器返回的任何值都將覆蓋在網(wǎng)站后臺(tái)中選擇的所有自動(dòng)更新設(shè)置。使用這些過(guò)濾器所做的更改也不會(huì)在界面中反映給用戶。強(qiáng)烈建議將這些過(guò)濾器與上面詳細(xì)介紹的鉤子結(jié)合使用,以通知用戶正在實(shí)施的自動(dòng)更新策略。
此方法不適用于所有站點(diǎn)。建議您使用新的用戶界面來(lái)管理自動(dòng)更新,除非您確定全面選擇自動(dòng)更新會(huì)適合您的網(wǎng)站。
此外,注意:此過(guò)濾器已添加到WordPress 3.7.0中的代碼庫(kù)中,很可能用于覆蓋當(dāng)今站點(diǎn)上插件和主題的自動(dòng)更新。如果新的UI元素似乎沒有更改您網(wǎng)站上插件或主題的自動(dòng)更新行為,這可能是原因所在。已發(fā)布#50662來(lái)通知網(wǎng)站所有者,網(wǎng)站健康中正在使用此過(guò)濾器。
有關(guān)信息,請(qǐng)參閱Trac上的以下文章:#50052,#50280。
其他相關(guān)更新
- 建議使用Updates API來(lái)支持WordPress 5.5中插件和主題的自動(dòng)更新UI
- 在WP 5.5中控制插件和主題自動(dòng)更新電子郵件通知和站點(diǎn)運(yùn)行狀況信息




