it-swarm.com.de

Wie erstelle ich ein Wordpress-Plugin für ein anderes Wordpress-Plugin?

Ich ändere immer die Wordpress-Plugins für Kunden. Es besteht jedoch immer die Gefahr, dass diese Änderungen verloren gehen, wenn das Plugin aktualisiert wird.

Gibt es eine Möglichkeit, ein Plugin für ein anderes Plugin in Wordpress zu erstellen? Gibt es eine Möglichkeit, die Änderungen beizubehalten oder nach jedem Plugin-Update erneut anzuwenden?.

6
alhoseany

Ich denke, der beste Weg, dies zu tun, sind Aktionen und Filter, so wie wir den WordPress-Kern selbst erweitern.

Andere Optionen sind wie @helgatheviking pointiert. Wenn das Plugin class ist, können Sie es erweitern.

Leider bieten nicht alle Plugin-Entwickler nützliche Filter und Aktionen mit ihrem Code an. Meistens ist das Plugin nicht auf OOP Weise geschrieben. Die einzige Möglichkeit, Ihre Änderungen beim Plugin-Update zu speichern, besteht darin, eine Kopie des ursprünglichen Plugins zu erstellen und den Namen des Plugins zu ändern. Ich gehe normalerweise dem ursprünglichen Namen voran, z. Mamaduka Twitter Connect, aber mit dieser Lösung müssen Sie den Code des ursprünglichen Plugins manuell aktualisieren.

Wenn Sie der Meinung sind, dass das Plugin mehr Filter/Aktionen benötigt, können Sie sich an den Autor wenden und ihn bitten, diese Hooks in den Core aufzunehmen.

4
Mamaduka

Eine einfache Möglichkeit wäre, benutzerdefinierte Hooks in Ihrem Plugin zu definieren, an die Sie sich binden können. Das eingebaute Hook-System ermöglicht es Ihnen, Ihre eigenen Hooks zu erstellen und diese dann wie normale Wordpress-Hooks zu binden. Der Wordpress Codex enthält großartige Beispiele und Erklärungen zur Funktion do_action und wie Sie damit benutzerdefinierte Hooks erstellen können. Eine von Plugin- und Theme-Entwicklern stark übersehene Funktion in Wordpress.

Ich bin fest davon überzeugt, dass das Hooks-System alles ist, was Sie brauchen, um Plugins zu entwickeln, die durch andere Plugins erweitert werden können, aber wie gesagt, von 90% aller Wordpress-Entwickler ernsthaft übersehen werden.

Unten finden Sie ein Beispiel (entnommen aus dem bereitgestellten Wordpress Codex-Link):

<?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

FWIW, Sie können die Versionsnummer des Plugins erhöhen, damit es nicht automatisch aktualisiert wird. Es ist zwar nicht die beste Lösung, löst aber das unmittelbare Problem. Sie können auch die Benennung und die Dateinamen ändern, sodass sie nicht mehr das gleiche Plugin sind.

1
Norcross