Während des Vanilla WP Core Loads wird der aktuelle Benutzer eingerichtet, $wp-init()
der sich nach dem Laden des Themas und vor dem init
Hook befindet. Dies steht im Einklang mit der guten Praxis, dass Funktionen an init
oder später angeschlossen werden.
Es ist jedoch auch üblich, verwandte Funktionen aufzurufen, beispielsweise current_user_can()
früher . Es ist per Definition für Plugins erforderlich, die mit früheren Phasen des Ladevorgangs arbeiten (mein Toolbar Theme Switcher-Plugin wäre ein Beispiel).
Die Dokumentation erhebt keine Ansprüche für oder gegen diese Praxis (die ich finden konnte).
Einige Plugins scheinen sich jedoch in benutzerbezogene Funktionen einzubinden und erwarten init
jederzeit den Post- Status.
Zum Beispiel wirft bbPress folgenden Hinweis:
// If the current user is being setup before the "init" action has fired,
// strange (and difficult to debug) role/capability issues will occur.
if ( ! did_action( 'after_setup_theme' ) ) {
_doing_it_wrong( __FUNCTION__, __( 'The current user is being initialized without using $wp->init().', 'bbpress' ), '2.3' );
}
Zur schnellen Demonstration werfen Sie dies in die Kerndefinition von current_user_can()
:
function current_user_can( $capability ) {
if ( ! did_action('after_setup_theme') ) {
echo wp_debug_backtrace_summary();
}
Wer ist in dieser Situation „richtig“? Gibt es eine kanonische Bestimmung über die erlaubte / verbotene Nutzung benutzerbezogener Funktionen vor init
?