Bei der Entwicklung von Themen und Plugins ist es manchmal erforderlich, einem Hook mithilfe von bedingten Anweisungen einige Funktionen hinzuzufügen.
Beispiel:
function my_custom_function() {
if( is_home()) {
<---what should the function do--->
}
}
add_action( 'some_hook', 'my_custom_function' );
Nach meinem Verständnis wird is_home
der Inhalt der Funktion nicht ausgeführt , wenn eine andere Bedingung vorliegt ( return false), die Funktion wird jedoch ausgeführt, obwohl sie "leer" ist. Dies bedeutet, dass eine leere Funktion an den Hook übergeben wird. Auf diese Weise werden alle Beispiele im Codex mit bedingten Tags angezeigt.
Ich verstehe, dass dies sicher ist und keine signifikanten Auswirkungen auf die Ladezeiten haben sollte (wenn es überhaupt Auswirkungen auf die Ladezeiten gibt).
Ich habe gedacht, dass derselbe Code wie im Beispiel wie folgt geschrieben werden kann
if( is_home()) {
function my_custom_function() {
<---what the function should do--->
}
add_action( 'some_hook', 'my_custom_funtion' );
}
Dies überspringt alles vollständig, wenn is_home
false zurückgegeben wird.
Es macht mir nichts aus, eine dieser beiden Methoden anzuwenden. Aber was ich wissen möchte, weil das erste Beispiel ausgiebig verwendet wurde, gibt es einen Codierungsstandard, der besagt, dass dies die richtige Methode ist, oder ist dies nach Ansicht von WordPress-Entwicklern eher die bevorzugte Methode oder nur eine persönliche Präferenz.
quelle
Erstellen Sie keine Funktionen im laufenden Betrieb. Dies ist schwer zu lesen und zu debuggen. Implementieren Sie stattdessen die Trennung von Bedenken und trennen Sie die Registrierung von Rückrufen von ihrer Ausführung (Geschäftslogik). Das logische Festlegen der bedingten Prüfungen vor der Rückrufregistrierung ist jetzt ganz einfach.
Warten Sie, bis die Aktion
template_redirect
diesen Registrierungshandler instanziiert, da Sie dann wissen, obis_home()
sie überprüft werden kann.Beispiel
quelle
is_home()
sowieso nicht so früh anrufen sollten, sonst erhalten Sie Folgendes :PHP Notice: is_home was called <strong>incorrectly</strong>. Conditional query tags do not work before the query is run. Before then, they always return false. Please see <a href="http://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information. (This message was added in version 3.1.)
.Ich möchte nur hinzufügen, dass man im Allgemeinen vorsichtig sein sollte, wenn man bedingte Tags verwendet wie:
im globalen Bereich von
functions.php
, da es ausgeführt wird, bevor ein Filter oder eine Aktion mitdo_action()
oder ausgelöst wirdapply_filters()
.quelle
Ich würde persönliche Präferenz sagen.
Außerdem ist es sauberer, den Funktionsaufruf außerhalb der if-Anweisung und die darin enthaltene Aktion auszuführen. Auf diese Weise wird die Funktion von der Aktion immer noch nur aufgerufen, wenn die if-Anweisung true zurückgibt.
Wenn Sie Funktionsdefinitionen immer außerhalb der if-Anweisung halten, wird sichergestellt, dass Sie niemals eine Funktion aufrufen, die zufällig abgefangen und nicht abrufbar ist.
quelle
Ich möchte nur eine weitere Option hinzufügen. Das Hybrid Core Framework hat eine Methode namens "Smarter Hooks" implementiert, die den Kontext erkennt.
Die vollständige Quelle finden Sie hier:
https://github.com/justintadlock/hybrid-core/blob/master/functions/core.php
Idealerweise kann es folgendermaßen verwendet werden:
quelle