當(dāng)前位置:首頁(yè)>WordPress建站>WordPress開發(fā)>在 WordPress 5.5+ 中控制插件和主題自動(dòng)更新的界面元素

在 WordPress 5.5+ 中控制插件和主題自動(dòng)更新的界面元素

網(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ā)布。

儀表板上站點(diǎn)的“插件”頁(yè)面的界面快照,其中包含新的“自動(dòng)更新”列

這些新控件將使網(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_pluginsupdate_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)更新。接受的兩種類型是themeplugin

// 檢查是否為插件啟用了自動(dòng)更新
$plugin_auto_updates_enabled = wp_is_auto_update_enabled_for_type( 'plugin' );

禁用自動(dòng)更新用戶界面元素

如果需要,可以禁用新的界面元素。返回falseplugins_auto_update_enabledthemes_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é)果如下:

在上面的屏幕截圖中,使用上一個(gè)示例修改了一個(gè)特定插件的“自動(dòng)更新”列中的默認(rèn)切換操作

以下是默認(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-themetwentytwenty主題的文本自動(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é)果如下:

在上面的屏幕截圖中,使用上一個(gè)示例修改了自動(dòng)更新的默認(rèn)切換操作

以下是默認(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_pluginauto_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)更新

聲明:本站所有文章,如無(wú)特殊說(shuō)明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
WordPress開發(fā)

在WordPress博客首頁(yè)排除某些文章

2020-7-16 8:06:38

WordPress開發(fā)

WordPress 5.5+ 注冊(cè)和注銷古騰堡塊模型

2020-7-17 9:21:10

0 條回復(fù) A文章作者 M管理員
    暫無(wú)討論,說(shuō)說(shuō)你的看法吧
?
個(gè)人中心
購(gòu)物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

厦门市| 磴口县| 金乡县| 兴城市| 霍林郭勒市| 长子县| 彭阳县| 吉隆县| 龙海市| 金乡县| 福海县| 滦南县| 特克斯县| 漠河县| 咸宁市| 云南省| 双桥区| 祁门县| 扎鲁特旗| 行唐县| 苏尼特右旗| 玛纳斯县| 楚雄市| 兰州市| 双牌县| 教育| 陵水| 天津市| 丰台区| 安吉县| 屏东市| 额敏县| 凯里市| 齐齐哈尔市| 周口市| 五河县| 三台县| 昭平县| 汽车| 久治县| 额尔古纳市|