web-dev-qa-db-fra.com

Comment créer un plugin Wordpress pour un autre plugin wordpress?

Je fais toujours des changements sur les plugins Wordpress pour les clients. Mais ces modifications risquent toujours d'être perdues si le plugin est mis à jour.

Est-il possible de créer un plugin pour un autre plugin dans Wordpress? Existe-t-il un moyen de conserver les modifications ou de les réappliquer après chaque mise à jour de plug-in?.

6
alhoseany

Je pense que la meilleure façon de le faire est via des actions et des filtres, comme si nous étendions le noyau WordPress lui-même.

D'autres options sont comme @helgatheviking, si le plugin est une classe, vous pouvez l'étendre.

Malheureusement, tous les développeurs de plug-in ne fournissent pas de filtres et d'actions utiles avec leur code. Le plus souvent, le plug-in n'est pas écrit de la manière OOP. Le seul moyen de sauvegarder vos modifications lors de la mise à jour du plugin est de créer une copie du plugin original, de changer le nom du plugin. Je préfixe habituellement le nom d'origine, par exemple. Mamaduka Twitter Connect, mais avec cette solution, vous devrez mettre à jour manuellement le code du plugin original.

Si vous pensez que ce plugin a besoin de plus de filtres/actions, vous pouvez contacter l'auteur et lui demander d'inclure ces points d'ancrage dans le noyau.

4
Mamaduka

Un moyen simple serait de définir des points d'ancrage personnalisés dans votre plugin auxquels vous pouvez vous accrocher. Le système de crochets intégré vous permet de créer vos propres crochets et de les relier comme des crochets Wordpress normaux. Le Wordpress Codex contient d'excellents exemples et explications sur la fonction do_action et sur la manière de l'utiliser pour créer des hooks personnalisés. Une fonctionnalité sérieusement négligée dans Wordpress par les développeurs de plugins et de thèmes.

Je suis fermement convaincu que le système de hook est tout ce dont vous avez besoin pour développer des plugins qui peuvent être étendus par d’autres, mais comme je l’ai dit, 90% des développeurs Wordpress l’ont sérieusement négligé.

Voir ci-dessous pour un exemple (tiré du lien Wordpress Codex fourni):

<?php 
# ======= Somewhere in a (mu-)plugin, theme or the core ======= #

/**
 * You can have as many arguments as you want,
 * but your callback function and the add_action call need to agree in number of arguments.
 * Note: `add_action` above has 2 and 'i_am_hook' accepts 2. 
 * You will find action hooks like these in a lot of themes & plugins and in many place @core
 * @see: http://codex.wordpress.org/Plugin_API/Action_Reference
 */

// Define the arguments for the action hook
$a = array(
     'eye patch' => 'yes'
    ,'parrot' => true
    ,'wooden leg' => (int) 1
);
$b = 'And hook said: "I ate ice cream with peter pan."'; 

// Defines the action hook named 'i_am_hook'
do_action( 'i_am_hook', $a, $b );

# ======= inside for eg. your functions.php file ======= #

/**
 * Define callback function
 * Inside this function you can do whatever you can imagine
 * with the variables that are loaded in the do_action() call above.
 */
function who_is_hook( $a, $b )
{
    echo '<code>';
        print_r( $a ); // `print_r` the array data inside the 1st argument
    echo '</code>';

    echo '<br />'.$b; // echo linebreak and value of 2nd argument
} 
// then add it to the action hook, matching the defined number (2) of arguments in do_action
// see [http://codex.wordpress.org/Function_Reference/add_action] in the Codex 

// add_action( $tag, $function_to_add, $priority, $accepted_args );
add_action( 'i_am_hook', 'who_is_hook', 10, 2 );  

# ======= output that you see in the browser ======= #

Array ( 
    ['eye patch'] => 'yes'
    ['parrot'] => true
    ['wooden leg'] => 1
) 
And hook said: "I ate ice cream with peter pan."
3
Dwayne Charrington

FWIW, vous pouvez augmenter le numéro de version du plugin pour qu’il ne se mette pas à jour automatiquement. Bien que ce ne soit pas la meilleure solution, cela résoudra le problème immédiat. Vous pouvez aussi changer les noms et les noms de fichiers pour qu'ils ne soient plus le "même" plugin.

1
Norcross