Ich habe ein kleines Plugin geschrieben, um einige Menüelemente für Benutzer ohne Administratorrechte aus dem Backend zu entfernen, und festgestellt, dass mein Plugin nichts getan hat, es sei denn, ich habe in meinem Code eine Priorität angegeben:
add_action('admin_bar_menu', 'remove_toolbar_items', 999);
Ohne das entfernt 999
der Code die Elemente in meiner remove_toolbar_items
Funktion nicht und funktioniert damit hervorragend:
function remove_toolbar_items( $wp_admin_bar ) {
if ( !current_user_can( 'manage_options' ) ) {
$wp_admin_bar->remove_node('new-post');
$wp_admin_bar->remove_node('comments');
}
}
Die Dokumente für den Prioritätsparameterstatus:
Wird verwendet, um die Reihenfolge anzugeben, in der die einer bestimmten Aktion zugeordneten Funktionen ausgeführt werden. Niedrigere Zahlen entsprechen einer früheren Ausführung, und Funktionen mit derselben Priorität werden in der Reihenfolge ausgeführt, in der sie der Aktion hinzugefügt wurden. Standardwert: 10
Ich habe jedoch nichts gefunden, was erklärt, wie Sie bestimmen sollen, welche Priorität verwendet werden soll. Wie bestimmen Sie, wann und welche Priorität verwendet werden soll? Ich habe das Gefühl, ich hätte mir stundenlang am Kopf kratzen können, wenn ich nicht mit dem Prioritätsparameter herumgespielt hätte.
Ich sehe auch, dass die Standardpriorität 10 ist, aber gibt es einen bekannten Bereich von Prioritätswerten?
WordPress fügt Ihre Aktionen in ein Array mit indizierten Prioritäten ein. Sie können dies durch Ausdrucken (im Admin-Bereich
admin_init
) sehen$wp_filter
:* Hinweis * Wie @s_ha_dum in den Kommentaren unten ausführt, werden
admin_init
möglicherweise nicht alle hinzugefügten Hooks in die Aktion einbezogen, sondern der zuverlässigere Ausdruck wird möglicherweiseshutdown
verwendet.Dies gibt uns ein ordentliches Array, das ungefähr so aussieht: (vereinfacht)
Die Werte 0, 4, 7, 10 usw. sind die Prioritäten der Aktionen. Wenn eine neue Aktion hinzugefügt wird, wird standardmäßig 10 verwendet, ähnlich wie bei Index 0 im obigen Beispiel. Sie werden nur in denselben Index des Arrays gestapelt . In Anbetracht der Tatsache, dass dieser bestimmten Aktion viele Hooks hinzugefügt werden, möchten Sie diese ganz am Ende oder zuletzt nach dem Ausführen einer bestimmten Aktion (z. B. Menüs) ausführen. Eine der beiden Prioritäten könnte ebenso effektiv funktionieren:
81
oder201
.Zum größten Teil ist die Standardpriorität von 10 ausreichend. In anderen Fällen möchten Sie Ihren Hook direkt nach dem anderen hinzufügen (um möglicherweise seinen Zweck aufzuheben oder ein bestimmtes Element zu entfernen). In diesem Fall können Sie mithilfe des
global $wp_filter;
Hooks herausfinden, wohin er gehen muss.quelle
admin_init
und nur Dinge, die bei der aktuellen Installation angeschlossen waren. Es sagt nichts darüber aus, was ein noch deinstalliertes Plugin oder Theme tun könnte. +1 sowieso.admin_footer
oder? Oder wäre das das gleiche Problem?shutdown
Hook wäre die beste Wahl, aber nur für installierten Code, und selbst dann können die Dinge bedingt verknüpft werden, so dass es möglich sein kann, einige zu verpassen.Nun, es gibt eine Möglichkeit, die Priorität einer Aktion zu finden.
Wir können den folgenden Code verwenden,
has_action( $tag, $function_to_check )
der optional die Priorität für diesen Hook für die angegebene Funktion zurückgibt.Ref: https://codex.wordpress.org/Function_Reference/has_action
quelle
Für den Fall, dass jemand nach einer WordPress-Aktionsprioritäts- / Referenzliste sucht, finden Sie hier den vollständigen Hook-Link:
https://codex.wordpress.org/Plugin_API/Action_Reference/
quelle