web-dev-qa-db-fra.com

Comment éditer un plugin wordpress sans interrompre son processus de mise à jour

Je voudrais ajouter quelques fonctionnalités/fonctionnalités supplémentaires avec le plugin WordPress déjà disponible.

Est-il possible de reporter ma personnalisation lors de la mise à jour du plugin?

6
Aadi

Probablement pas.

La méthode recommandée pour intégrer vos améliorations dans le plug-in est la suivante: Envoyez vos correctifs au développeur et demandez-lui de les fusionner dans l'original. Si vos modifications sont des personnalisations plutôt personnelles, cela ne se produira pas.

Si le plugin est écrit dans un style OOP strict, vous pouvez créer un second plugin qui étend uniquement les classes de l'original selon vos besoins (une sorte de plugin enfant). Malheureusement, la plupart des développeurs de plugins ne voient pas cette nécessité et n’écrivent pas leur code en conséquence. Soyez conscient du problème d'ordre de chargement .

Nous pourrions mieux vous aider si vous décriviez le plug-in que vous voulez étendre et ce que vous voulez changer exactement.

8
fuxia

Malheureusement, cela dépend totalement du plugin (ou plus exactement de l'auteur du plugin!) Si l'auteur pensait de manière proactive et a créé le plugin de manière à le rendre extensible, alors oui, vous pouvez créer votre plugin OWN qui ajoute à la fonctionnalité dans le plugin existant.

Prenez note de ce que Toscho a souligné - que votre ordre de plugin est important (le lien est à nouveau ici ).

Crochets

Le moyen le plus courant de rendre un plug-in extensible consiste à ajouter des points d'ancrage (actions et filtres) que vous pouvez ensuite utiliser avec votre propre plug-in. Si vous avez un bon éditeur de code (en ce moment, j’ai basculé sur NetBeans ), vous devez effectuer une recherche dans les fichiers sources du plug-in à la recherche de: do_action et apply_filters. Si l'auteur du plug-in a fourni ces points d'ancrage, il s'agit d'un moyen très pratique et facile de remplacer les paramètres par défaut ou d'injecter votre propre code.

Fonctions enfichables

Si l'auteur du plug-in est averti, mais utilise l'espace de noms global pour les fonctions du plug-in, il/elle peut avoir encapsulé les fonctions du plug-in dans des instructions conditionnelles if ( function_exists() ). Pour que cela fonctionne à votre avantage, vous devez vous assurer que votre plugin est chargé en premier (ce qui peut être un défi). Tout ce que vous avez à faire est de déclarer votre fonction sous le même nom exact dans le même espace de noms, puis votre fonction remplacera celle utilisée par le plug-in.

Extension

Si l'auteur du plug-in est un bon codeur OOP, il peut écrire le code du plug-in de manière suffisamment granulaire et ouverte pour une extension (puisque, comme le dirait le GOF, il est définitivement fermé pour modification). . Recherchez une grande granularité dans la classe de plug-in, c'est-à-dire des méthodes qui effectuent de petites tâches très spécifiques, qui peut être remplacée dans votre propre classe qui étend la classe du plug-in. Bien sûr, comme le mentionne Toscho, la classe doit être structurée de manière à pouvoir être remplacée et que son implémentation par défaut ne s’appelle pas complètement.

Fourchette ou Patch

Si l'auteur du plug-in utilise gitHub , ou a ouvert le code source d'une autre manière, vous pouvez envoyer un correctif à l'auteur avec les modifications que vous proposez (le mieux est de modifier le plug-in pour le rendre PLUS. souple ou puissant sans supprimer ni modifier les fonctionnalités existantes), ou vous pouvez simplement télécharger le code source, modifier l'en-tête du plug-in dans la mesure où il ne sera plus mis à jour lorsque l'auteur d'origine publiera une mise à jour et, de préférence, soumettra votre version mise à jour à l'auteur, ou en tant que sa propre entité directement à WordPress . Sachez que si vous soumettez le plug-in à WP, vous aurez besoin d'un site pour celui-ci et vous devrez être prêt à le prendre en charge si d'autres le téléchargent.

5
Tom Auger

Je comprends que cette question est vraiment ancienne, mais j’ai pensé que cela pourrait aider quelqu'un.

Si vous estimez que les modifications aideraient la communauté, veuillez les soumettre au développeur. Toutefois, si les modifications sont uniques à votre installation, vous pouvez continuer à lire ce qui suit.

J'ai eu ce problème sur le report des modifications à la version mise à jour d'un thème. Nous avons fait un recursif diff de old_version à modified_old_version, puis nous avons appliqué le correctif créé sur la nouvelle version du thème à l’aide de l’outil patch .

Les outils de correction créent des fichiers avec des modifications qui ne pouvaient pas être appliquées automatiquement. Nous en avons eu quelques-uns et avons pu facilement identifier et apporter ces modifications manuellement.

Lorsque vous apportez des modifications, vous devez vous assurer de ne pas modifier l'espacement pour l'ensemble du fichier à l'aide de fonctions d'édition telles que l'indentation automatique, etc. En d'autres termes, apportez les modifications uniquement si nécessaire. Cela ne ferait que rendre plus tardif le processus de report des modifications.

0

Je sais que c'est une question très ancienne mais je pense avoir trouvé la solution ...

J'ai un plugin dans lequel l'un des développeurs de mon client l'a modifié dans la limite des répertoires et sous-répertoires, les fichiers sont supprimés à la mise à jour et le plugin plante. Afin de rendre le plug-in d'origine indépendant de toute mise à jour principale, j'ai déplacé les fichiers et les dossiers modifiés vers un plug-in séparé dans un répertoire nommé extension.

Utilisation du code présent sur https://Gist.github.com/wpsmith/af206df2cf6a38e4e2f0

J'ai ajouté la classe définie par Tarvis Smith dans WPS_Extend_Plugin.php et je l'ai incluse dans mon plugin. À l'aide de la classe WPS_Extend_Plugin, j'ai indiqué le répertoire de fichiers/dossiers étendus au dossier cible extension. Il n'y a pas encore d'échec, mais je ne suis pas sûr que ce soit la bonne façon d'étendre un plugin ou pas!

// Require WPS_Extend_Plugin class
require_once( 'classes/WPS_Extend_Plugin.php' );

// Extend Sitepress Multilingual CMS
new WPS_Extend_Plugin( 'sitepress-multilingual-cms/sitepress.php', __FILE__, '3.9.0', 'CHERRY' );
// Extend AddThis
new WPS_Extend_Plugin( 'extension', __DIR__, '0.1', 'CHERRY' );
0
Hassan Alvi