it-swarm.com.de

Geteilte Funktionalität in Plugins und Themes

Ich habe kürzlich angefangen, Plugins und Themes zu entwickeln und habe festgestellt, dass ich mehrere Funktionen von beiden verwenden muss.

Manchmal überlege ich, ob eine Funktion/Klasse existiert, bevor ich wie in diesem Beitrag erklärt habe: Wann soll ich prüfen, ob eine Funktion existiert

Aber das wird als schlechte Praxis angesehen. Was ist die beste Vorgehensweise, um Konflikte zu vermeiden und Designs und Plugins unabhängig voneinander zu betreiben, ohne dass ein Design/Plugin installiert ist?

8
Jeg Bagus

Aktionen & Filter

Der imho beste Weg ist es, mit einer Aktion Plugin-Funktionen in Themes zu bringen.

Beispiel 1

Hier ist ein kleines Plugin, um dies zu testen.

<?php 
/** Plugin Name: (#68117) Print Hello! */
function wpse68117_print_hello()
{
    echo "Hello World!";
}
add_action( 'wpse68117_say', 'wpse68117_print_hello' );

Innerhalb des Themas:

<?php
/** Template Name: Test »Print Hello!« Plugin */
get_header();
// Now we call the plugins hook
do_action( 'wpse68117_say' );

Was passiert jetzt/Das koole Kind

Auf diese Weise müssen wir nicht das Vorhandensein einer Funktion, einer Datei, einer Klasse, einer Methode oder sogar eines (tun Sie das nicht!) Globalen $variable überprüfen. Das WP intern global übernimmt dies bereits für uns: Es prüft, ob der Hook-Name der aktuelle Filter ist und hängt ihn an. Wenn es nicht existiert, passiert nichts.

Beispiel # 2

Mit unserem nächsten Plugin fügen wir eine Rückruffunktion hinzu, die ein Argument akzeptiert.

<?php 
/** Plugin Name: (#68117) Print Thing! */
function wpse68117_print_thing_cb( $thing )
{
    return "Hello {$thing}!";
}
add_filter( 'wpse68117_say_thing', 'wpse68117_print_thing_cb' );

Innerhalb des Themas:

<?php
/** Template Name: Test »Print Thing!« Plugin */
get_header();
// Now we call the plugins hook
echo apply_filter( 'wpse68117_say_thing', 'World' );

Dieses Mal bieten wir dem Benutzer/Entwickler die Möglichkeit, ein Argument hinzuzufügen. Er kann die Ausgabe entweder echo/printen oder sogar weiterverarbeiten (falls Sie ein Array erhalten haben).

Beispiel # 3

Mit dem dritten Plugin fügen wir eine Rückruffunktion hinzu, die zwei Argumente akzeptiert.

<?php 
/** Plugin Name: (#68117) Print Alot! */
function wpse68117_alot_cb( $thing, $belongs = 'is mine' )
{
    return "Hello! The {$thing} {$belongs}";
}
add_filter( 'wpse68117_grab_it', 'wpse68117_alot_cb' );

Innerhalb des Themas:

<?php
/** Template Name: Test »Print Alot!« Plugin */
get_header();
// Now we call the plugins hook
$string_arr = implode(
     " "
    ,apply_filter( 'wpse68117_grab_it', 'World', 'is yours' )
);
foreach ( $string_arr as $part )
{
     // Highlight the $thing
     if ( strstr( 'World', $part ) 
     {
         echo "<mark>{$part} </mark>";
         continue;
     }
     echo "{$part} ";
}

Mit diesem Plugin können jetzt zwei Argumente eingefügt werden. Wir können es in einem $variable speichern und weiterverarbeiten.

Fazit

Mit Filtern und Aktionen erzielen Sie eine bessere Leistung, indem Sie unnötige Überprüfungen vermeiden (vergleichen Sie die Geschwindigkeit von function_*/class_*/method_*/file_exists oder die Suche nach einem globalen Filter mit in_array() für ~ 1k (?) Filtersuchen). Sie vermeiden es auch, all diese unnötigen Hinweise für nicht gesetzte Variablen usw. zu haben, da sich das Plugin darum kümmert.

12
kaiser