2 votes

Remplacer la fonction d'un plugin par celle d'un autre plugin/classe étendue

J'ai un plugin "freemium", et je fais quelques mises à jour majeures. À l'origine, les utilisateurs qui achetaient la version pro devaient désinstaller le plugin gratuit, puis installer la version pro. C'était compliqué, mais j'étais un débutant. J'aimerais donc que les utilisateurs puissent installer le plugin gratuit, puis la mise à jour pro qui étendra les fonctionnalités comme prévu.

Mon plugin actuel utilise une classe : class MyFreePlugin { __construct() ... } et mon plugin de mise à jour étend la classe : class MyProPlugin extends MyFreePlugin { ... }

Voici mon problème. J'aimerais ajouter des fonctionnalités à la page de configuration du plugin et à la fenêtre popup tnyMCE, ainsi que remplacer complètement certaines des actions, filtres et fonctions de la version gratuite.

Exemple : le plugin gratuit a

add_action('admin_head',array(&$this,'my_free_admin_head_fn'));

Il ajoute/enquête quelques scripts dans le menu d'administration. Je voudrais supprimer/supprimer l'action originale et mettre en file d'attente les scripts dans le plugin pro :

add_action('admin_head',array(&$this,'pro_other_admin_head_fn').

De plus, comme je suis novice en matière de classes php, surtout dans le contexte de WordPress, comment ma classe étendue peut-elle obtenir les valeurs des variables du parent ?

Tout cela est-il possible, et si oui, comment ? Si vous avez des exemples, ce serait encore mieux. J'ai parcouru le manuel php, mais il n'est pas très utile lorsqu'il s'agit de remplacer les filtres et les actions. Merci pour votre aide !

... Pour contrer votre réponse Janw, Malheureusement, cela ne semble pas fonctionner. Voici un exemple : Dans la __construct() du plugin gratuit, j'ai ceci :

add_action('admin_menu', array(&$this,'add_plugin_menu'));

qui appelle une fonction pour ajouter un menu à la barre latérale d'administration. Dans ma version "pro" du plugin, je teste pour voir si je peux supprimer cette action avant qu'elle ne se déclenche avec l'un de ces éléments :

remove_action('admin_menu', array(&$this,'add_plugin_menu')); (nothing)
remove_action('admin_menu', array(parent,'add_plugin_menu')); (nothing)
remove_action('admin_menu', array(&parent,'add_plugin_menu')); (throws an error)
remove_action('admin_menu', 'parent::add_plugin_menu'); (nothing)

etc. En fait, le plugin gratuit est chargé avant le plugin pro, de sorte que les actions semblent avoir lieu avant que je puisse les supprimer ou les remplacer. De plus, je ne peux pas accéder aux variables du parent à moins de les rendre toutes publiques, ce que je ne préfère pas faire.

0voto

janw Points 4505

Vous pouvez utiliser remove_action() pour supprimer les fonctions de votre version gratuite. Et dans la version pro, vous ne pouviez inclure que la fonction MyFreePlugin et ensuite étendre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X