Voici un tour dâhorizon des fonctionnalitĂ©s permettant de hooker lâinterface des mises Ă jour automatiques des thĂšmes et extensions sur votre site WordPress. Cette fonctionnalitĂ© est assez importante pour moi dans la mesure oĂč je me suis occupĂ© de diriger son dĂ©veloppement pendant 6 mois, avec lâaide de Paul Biron. Je vais mâefforcer dâen faire un tour complet pour les dĂ©veloppeuses et dĂ©veloppeurs. Lâarticle en français destinĂ© aux administrateur·ice·s (donc non technique) de sites sortira quant Ă lui sur fr.wordpress.org.
Cet article est une traduction en français de la dev note â note Ă destination des dĂ©veloppeur·euse·s â que jâai publiĂ© sur le blog de dĂ©veloppement de WordPress (en anglais).
La sĂ©curitĂ© est Ă©videmment un enjeu de taille pour un site internet. Conserver son site Ă jour avec la derniĂšre version de WordPress, de PHP, ou des thĂšmes et extensions installĂ©es (mĂȘme si elles ne sont pas actives !) est hautement recommandé⊠voire tout simplement obligatoire. Les mises Ă jour sont le meilleur moyen de se prĂ©munir de toute vulnĂ©rabilitĂ© connue sur un thĂšme ou sur une extension.
Par dĂ©faut, WordPress est configurĂ© pour se mettre Ă jour automatiquement lorsquâune mise Ă jour mineure est disponible. Le code permettant la mise Ă jour automatique des extensions et des thĂšmes est disponible depuis longtemps, mais ce code est rarement utilisĂ© par les personnes administrant des sites WordPress car cela demande lâutilisation de crochets et de filtres.
En fĂ©vrier dernier, une extension de fonctionnalitĂ© a Ă©tĂ© crĂ©Ă©e pour faire suite Ă un article listant les 9 projets pour 2019/2020. Cette extension avait pour but dâexplorer lâintroduction dâune interface permettant aux administrateur·ice·s de sites de gĂ©rer facilement les mises Ă jour automatiques des thĂšmes et des extensions Ă partir du tableau de bord de leur site WordPress.
AprĂšs 5 mois de dĂ©veloppement sur le dĂ©pĂŽt GitHub ouvert pour que nous puissions gĂ©rer ce projet, aprĂšs de nombreux retours de la part des utilisateurs et utilisatrices (lâextension Ă©tant disponible sur le rĂ©pertoire des extensions WordPress.org, aprĂšs de nombreux tests en situation (lâextension est actuellement installĂ©e et activĂ©e sur plus de 1000 installations WordPress distinctes), et de nombreuses itĂ©rations de la part de lâĂ©quipe #core-auto-updates, cette nouvelle fonctionnalitĂ© a finalement Ă©tĂ© mergĂ©e dans WordPress 5.5 il y a quelques semaines et sera disponible pour tout le monde Ă partir du 11 aoĂ»t, date de sortie de WP 5.5

à noter : les mises à jour automatiques des thÚmes et des extensions sont désactivées par défaut. Les administrateurs et administratrices de sites doivent activer cette fonctionnalité thÚme par thÚme et extension par extension.
Ces nouveaux Ă©lĂ©ments dâinterface permettent aux propriĂ©taires de sites de conserver leurs sites Ă jour de version et sĂ©curisĂ©s, de façon automatisĂ©e.
Par défaut, tous les utilisateurs et utilisatrices ayant les permissions update_plugins
ou update_themes
peuvent activer les mises Ă jour automatiques. Sur les installations multisite, seulement les rĂŽles dâadmin du rĂ©seau disposent de ces permissions, et uniquement dans le contexte du tableau de bord du rĂ©seau.
Plusieurs crochets (hooks) sont disponibles pour les dĂ©veloppeurs et dĂ©veloppeuses, afin de pouvoir personnaliser la fonctionnalitĂ© Ă leur guise. Dans cet article, vous trouverez toutes les fonctions et crochets disponibles pour modifier les Ă©lĂ©ments dâinterface des mises Ă jour automatiques des thĂšmes et extensions.
Vérifier si les mises à jour auto sont activées pour une extension ou un thÚme
Cette fonction indique si les mises Ă jour auto sont actives pour un certain type dâĂ©lĂ©ment. Les deux types disponibles sont theme
et plugin
.
// VĂ©rifier si les mises Ă jour auto sont actives pour les extensions
$plugin_auto_updates_enabled = wp_is_auto_update_enabled_for_type( 'plugin' );
DĂ©sactivation des Ă©lĂ©ments dâinterface des mises Ă jour auto
Il est possible de dĂ©sactiver tous les Ă©lĂ©ments dâinterface des mises Ă jour auto si nĂ©cessaire. Si vous retournez false
aux filtres plugins_auto_update_enabled
et themes_auto_update_enabled
, les Ă©lĂ©ments dâinterface permettant de gĂ©rer la mises Ă jour automatique des extensions et des thĂšmes ne seront pas affichĂ©s. Par dĂ©faut, la valeur utilisĂ©e est true
et les Ă©lĂ©ments dâinterface sont donc affichĂ©s.
Ă noter : ceci ne permet pas dâactiver ou dĂ©sactiver la fonctionnalitĂ© de mise Ă jour automatique mais uniquement dâafficher ou de ne pas afficher les Ă©lĂ©ments dâinterface permettant dâactiver ou dĂ©sactiver les mises Ă jour auto.
Le bout de code suivant permet de dĂ©sactiver lâaffichage des Ă©lĂ©ments dâinterface permettant de gĂ©rer la mise Ă jour automatique des extensions et des thĂšmes :
// DĂ©sactivation de l'interface de mise Ă jour auto des extensions.
add_filter( 'plugins_auto_update_enabled', '__return_false' );
// DĂ©sactivation de l'interface de mise Ă jour auto des thĂšmes.
add_filter( 'themes_auto_update_enabled', '__return_false' );
Modification des liens dâaction des mises Ă jour auto
Parfois, une extension ou un thĂšme pourrait juger nĂ©cessaire de gĂ©rer lui mĂȘme ses mises Ă jour. Cela est plutĂŽt courant pour les extensions/thĂšmes qui ne sont pas hĂ©bergĂ©s sur le dĂ©pĂŽt officiel WordPress.org. Dans ce cas, il existe des filtres qui permettent aux dĂ©veloppeurs et dĂ©veloppeuses de modifier le rendu HTML de la fonctionnalitĂ© sur plusieurs emplacements.
Ăcran des extension: sites simples et multisites
Avec le filtre plugin_auto_update_setting_html
, il est possible de filtrer le contenu de la colonne de mise Ă jour auto des extensions. Cela inclut lâensemble du contenu de la colonne, y compris le lien dâactivation/dĂ©sactivation et lâaffichage du temps Ă attendre jusquâĂ la prochaine mise Ă jour.
Ce filtre passe en variable le HTML généré par défaut, ainsi que deux paramÚtre additionnels :
$plugin_file
: Le chemin du fichier principal de lâextension, relatif par rapport au rĂ©pertoire des extensions sur lâinstallation WP.$plugin_data
: Un tableau contenant les donnĂ©es de lâextension.
Par exemple, disons que lâextension « Mon Extension » souhaite Ă©viter que les mises Ă jour auto soient activĂ©es et que son chemin relatif au rĂ©pertoire des extensions soit mon-extension/mon-extension.php
. Lâexemple suivant modifie ce qui sâaffiche dans la colonne de mise Ă jour automatique uniquement pour cette extension.
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 );
Voici le résultat obtenu :

Pour référence, voici le rendu HTML généré par défaut :
<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>
Ăcran des thĂšmes : sites simples uniquement (hors multisite)
Le filtrage du contenu HTML des mises Ă jour auto sur lâĂ©cran des thĂšmes est un peu plus compliquĂ©, car cet Ă©cran est rendu Ă lâaide dâun template JavaScript. Cependant, il est possible de hooker cet Ă©cran en utilisant le filtre theme_auto_update_setting_template
et en retournant un contenu modifié pour la variable $template
(cette variable contient le template rendu pour chaque thĂšme de lâĂ©cran de gestion des thĂšmes).
Ă noter : comme ce template est utilisĂ© pour tous les thĂšmes de lâĂ©cran, il est nĂ©cessaire dâutiliser une condition pour vĂ©rifier que le thĂšme pour lequel vous modifiez le rendu HTML est bien le bon. Sinon, votre changement sâappliquera pour tous les thĂšmes. Vous pouvez effectuer cette vĂ©rification en utilisant le paramĂštre JS data.id
, qui contient le slug du thĂšme.
Toute la documentation sur les propriĂ©tĂ©s disponibles dans lâobjet data
est disponible dans la documentation de la fonction wp_prepare_themes_for_js() (en anglais).
Lâexemple suivant remplace le contenu HTML de lâĂ©lĂ©ment dâinterface des mises Ă jour auto pour les thĂšmes mon-theme
et twentytwenty
.
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' );
Voici le résultat pour le thÚme Twenty Twenty :

Pour référence, voici le HTML/JS rendu par défaut :
<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>
Ăcran des thĂšmes : installation multisite
Sur les installations multisites, lâĂ©cran de gestion des thĂšmes peut ĂȘtre modifiĂ© de façon similaire Ă lâĂ©cran des extensions dĂ©crit plus haut. Il suffit dâutiliser le filtre theme_auto_update_setting_html
. Cela inclut lâensemble du contenu HTML, y compris le lien dâactivation/dĂ©sactivation et lâaffichage du temps Ă attendre jusquâĂ la prochaine mise Ă jour.
Ce filtre passe en variable le HTML généré par défaut, ainsi que deux paramÚtre additionnels :
$stylesheet
: le nom du répertoire contenant le thÚme (autrement dit, son slug).$theme
: lâobjet completWP_Theme
.
Par exemple, disons que lâadministrateur·ice dâun rĂ©seau multisite souhaite dĂ©sactiver lâinterface de gestion des mises Ă jour automatiques pour le thĂšme Twenty Twenty. Le bout de code suivant peut ĂȘtre utilisĂ© :
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 );
Activer la mise à jour automatique de toutes les extensions et de tous les thÚmes, y compris ceux qui seront installés dans le futur
Si vous souhaitez activer les mises à jour automatiques pour tous les thÚmes et extensions WordPress actuellement installées et qui seront installées dans le futur, vous pouvez utiliser les filtres auto_update_plugin
et auto_update_theme
filters.
// Activer par défaut les mises à jour auto pour les extensions.
add_filter( 'auto_update_plugin', '__return_true' );
// Activer par défaut les mises à jour auto pour les thÚmes.
add_filter( 'auto_update_theme', '__return_true' );
Ă noter : toute valeur retournĂ©e en utilisant ces filtres surchargera les rĂ©glages faits sur les Ă©crans dâadministration du site. Par dĂ©faut, les modifications faites sur ces filtres ne modifieront pas lâinterface de gestion des mises Ă jour auto en back-office. Il est donc grandement recommandĂ© dâutiliser ces filtres en combinaison avec les crochets dâaction et filtres dĂ©taillĂ©s plus haut afin de ne pas afficher lâinterface par dĂ©faut.
Cette approche dâactivation automatique nâest pas forcĂ©ment la plus recommandĂ©e, câest Ă vous dâen juger en tant que gestionnaire de sites.
Ă noter Ă©galement : ce filtre nâest pas nouveau ! Il a Ă©tĂ© introduit dans la version 3.7 de WordPress. Dâailleurs, si vous lâutilisez dĂ©jĂ , cela pourrait expliquer que les Ă©lĂ©ments dâinterface de mise Ă jour automatique des thĂšmes et des extensions ne fonctionnent pas sur WordPress 5.5.
Si vous avez des questions, nâhĂ©sitez pas Ă laisser un petit commentaire ci-dessous. Si cet article vous a Ă©tĂ© utile, nâhĂ©sitez pas Ă le dire dans les commentaires aussi, ça fait toujours plaisir
Et si ça vous a vraiment Ă©tĂ© super utile, vous pouvez aussi mâoffrir une biĂšre
Dans un prochain article, nous verrons comment hooker les notifications e-mail envoyées lors des mises à jour automatiques.
Pour plus dâinformation, consultez les tickets liĂ©s Ă cette Ă©volution sur Trac : #50052 et #50280.
WordPress 5.5 sortira le 11 aoĂ»t 2020. Pour tester dĂšs Ă prĂ©sent cette nouvelle version, vous pouvez installer lâextension WordPress Beta Tester sur une installation de test.
Illustration dâentĂȘte: Laboratoire de Raoul Pictet Ă lâexposition universelle de Paris de 1878, gravure par Ch. Baude, disponible sur Wikimedia Commons