Thème de mise à jour automatique non hébergé sur le référentiel WordPress

Publié par Jean-Michel le

Comment intégrer un thème WordPress à la vérification de la mise à jour automatique. Je sais que vous pouvez vous connecter au programme de mise à jour automatique des plugins pour ajouter/supprimer des plugins du programme de mise à jour automatique, mais comment faites-vous cela avec des thèmes ?

J’ai essayé de creuser dans le thème Twenty Ten, mais il n’y a aucun code qui définit comment il se met à jour automatiquement ou l’enregistre pour la mise à jour automatique. Pourtant, il se met à jour automatiquement avec WordPress.

Toute aide serait grandement appréciée.

EDIT : J’aurais dû le préciser, mon thème n’est pas dans le référentiel WordPress. Il sera distribué séparément.

Solution n°1 trouvée

Étant donné que votre thème ne réside pas sur le référentiel WordPress, une méthodologie simple consiste à intégrer l’accès aux fichiers dans votre thème. Un moyen rapide de le faire :

  1. Incorporez le contrôle de version dans un fichier maître dans votre thème. Créez un fichier « version.php » qui a une variable PHP commeversion = 1.1
  2. Créez un répertoire où vos fichiers de thème seront hébergés sur votre propre site. Créez un fichier « version.txt » dans ce répertoire qui ne contient que le dernier numéro de version (c’est-à-dire : 1.2) et aucun autre texte ou nombre. L’URL peut ressembler à domaine.com/repository/version.txt.
  3. Concevez votre thème pour ouvrir le contenu de domain.com/repository/version.txt et utilisez PHP pour comparer les chiffres de chacun. S’il existe une version plus récente, téléchargez la dernière version du thème sous forme de ZIP.

    $version = floatval(file_get_contents('domain.com/repository/version.txt'));
    // note use only 1 decimal to keep it simple and prevent floatval() from failing

    if($version > $localversion) {
    copy("domain.com/repository/version".$version.".zip","theme/tmp/version_temp.zip");
    $zip = new ZipArchive;
    $res = $zip->open("theme/tmp/version_temp.zip");
    if ($res === TRUE) {
    $zip->extractTo("theme");
    $zip->close();
    echo 'ok';
    } else {
    echo 'failed';
    }
    }

Vous devrez prendre ce code, l’affiner et tenir compte des autorisations de fichiers et de ce qui fonctionne le mieux pour les performances.

Solution n°2 trouvée

Accrochez-vous àpre_set_site_transient_update_themes

Solution n°3 trouvée

wordpress.org a une API à l’écoute des demandes de mise à jour de plugin/thème. Le client est l’installation WordPress locale qui envoie ces demandes à WordPress.org et attend une réponse. L’installation locale de WordPress utilise wordpress.org par défaut, mais l’API distante peut être n’importe quelle URL personnalisée, telle que example.com.

Si votre installation WordPress locale est sur example.com, elle aura besoin d’un plugin personnalisé qui est conçu pour agir comme une API qui écoute les demandes de mise à jour en utilisant HTTP(s) de votre plugin/thème installé ailleurs, ou même sur le même serveur.

Pour qu’un plugin/thème envoie la requête API à un serveur, tel que example.com, plutôt que wordpress.org, vous devez créer un logiciel client, tel qu’une classe client, pour envoyer la requête API à example.com, et lorsque le client reçoit la réponse HTTP(s), il s’accroche à l’un des deux filtres :

pre_set_site_transient_update_plugins

pre_set_site_transient_update_themes

Un crochet de filtre est pour les plugins et un crochet de filtre est pour les thèmes. Ce ne sont pas les seuls crochets disponibles dans WordPress.

Pour résumer, une bibliothèque cliente doit être construite pour que le plugin pour le thème envoie des requêtes HTTP(s) à une API située sur un serveur, comme sur example.com. Un plug-in doit également être créé et installé sur le serveur, par exemple sur example.com, pour qu’une API écoute les requêtes HTTP des clients.

Ce qui est fait avec ces requêtes HTTP(s) sur le client et le serveur peut être personnalisé comme vous le souhaitez, mais il faut du temps pour développer une solution. Il existe des solutions gratuites et commerciales qui peuvent répondre à vos besoins immédiats, ou vous pouvez utiliser l’une de ces solutions comme point de départ pour créer votre propre solution personnalisée.

Voici le flux de requête et de réponse :

client ->(HTTP(s)) request)-> server(API)
server(API) ->(HTTP(s)) response)-> client

Voici deux solutions à titre d’exemple :

(Gratuit) wp-update-server de YahnisElsts

(Commercial) Gestionnaire d’API WooCommerce

Il existe actuellement d’autres solutions et tutoriels qu’une recherche Google peut aider à localiser.

Gardez à l’esprit que toute solution que vous développez doit avoir la sécurité au premier plan, afin de ne pas exposer votre serveur à un piratage, d’autant plus que vous exposez une API sur votre serveur. C’est l’une des raisons pour lesquelles j’ai inclus une solution commerciale parmi les nombreuses solutions disponibles.

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *