Aktuellen Admin Seiten-Hook (Page Hook Suffix) in WordPress auslesen

Nicht alle Inhalte eines eigenen WordPress Plugins müssen zu jeder Zeit geladen werden. WordPress bietet einige spezifische Hooks an, die sich in der Administrationsoberfläche einfach nutzen lassen. Welche das sind und wie man herausfindet, was der aktuelle Seiten-Hook (engl. Page Hook) ist, steht hier.

Zusammensetzung seitenspezifischer Hooks

Beispiele sind:

  • admin_footer-{$hook_suffix}
    Lädt etwas in den Footer einer spezifischen Seite.
  • admin_head-{$hook_suffix}
    Lädt etwas in den Header einer spezifischen Seite.
  • admin_print_scripts-{$hook_suffix}
    Lädt Scripte nur auf einer spezifischen Seite.
  • admin_print_styles-{$hook_suffix}
    Lädt Styles nur auf einer spezifischen Seite.
  • load-{$page_hook}
    Wird aufgerufen bevor eine Seitenview geladen wird.
  • {$page_hook}
    Wird nach dem load-{$page_hook} Hook ausgeführt.

Was sind mögliche Werte von $page_hook?

Beim Anlegen einer Seite durch die Funktion add_admin_page() wird der Hookname (also der $page_hook) direkt zurückgegeben. Aber Vorsicht: Page Hooks sind nicht gleich Page Hooks. Legt man eigene Obermenüpunkte mithilfe der Funktion add_admin_page() an, erhält man als Rückgabewert nicht etwa den Dateinamen des Plugins sondern ein Konstrukt, welches wie folgt aussieht: toplevel_page_{$name}. WordPress intern nutzt hingegen die Dateinamen, wie folgende Beispiele zeigen:

  • index.php für das “Dashboard”
  • edit.php für alle gängigen Artikeltypen (also z.B. unter “Beiträge” und “Seiten”)
  • upload.php für “Medien”
  • edit-comments.php für “Kommentare”
  • themes.php für “Design”
  • plugins.php für “Plugins”
  • users.php für “Benutzer”
  • tools.php für “Werkzeuge”
  • options-general.php für “Einstellungen”
  • settings.php für “Einstellungen” des Netzwerk-Administrationsbereichs ein.

Möchte man also beispielsweise ein Javascript nur auf der Seite “Users” einfügen, müsste man so vorgehen:

<?php
add_action( 'admin_print_scripts-users.php', 'meine_script_funktion');

function meine_script_funktion(){
  wp_enqueue_script( 'meine-js', plugins_url( 'assets/js/meine-js.js', __FILE__ ), array( 'jquery' ) );
}
?>

Was sind mögliche Werte von $hook_suffix?

Beim Anlegen einer Seite durch add_submenu_page() wird der so genannte “Hook Suffix” zurückgegeben. Suffix = Anhängsel. Blöderweise handelt es sich aber nicht nur um ein Anhängsel, denn der zurückgegeben Wert kann beispielsweise direkt in der Action load-{$page_hook} genutzt werden. Hier gilt also $page_hook = $hook_suffix.

Beispiel:

<?php
$hook_suffix = add_submenu_page(
	'options-general.php',
	_x( 'Fixed Social Share', 'plugin settings page title', 'wpbfsb' ),
	_x( 'Fixed Social Share', 'plugin settings menu title', 'wpbfsb' ),
	'manage_options',
	'wpbfsb',
	settings_page_render_function
);
?>

In der Variablen $hook_suffix befindet sich nun der Wert settings_page_wpbfsb. Meines erachtens müsste der Rückgabewert lediglich _wpbfsb sein. Dann wäre es wirklich ein Suffix. Der Präfix hingegen müsste options-general.php benannt werden. Denn so wird er ja auch registriert. Somit würde sich ein neuer Page Hook mit dem Namen 'options-general.php_wpbfsb' ergeben. WordPress hängt jedoch nicht den eigentlichen Page Hook als Präfix dran, sondern den so genannten Page Type (siehe plugin.php Zeile 1605). Aber okay, darüber kann man sich wohl streiten 😉 Dumm ist nur, dass man – gerade als Anfänger – nicht wirklich weiß, was denn gemeint ist.

Was ist $type_now?

Wie $hook_suffix ist $type_now eine globale Variable. Sie ist nötig, damit man die unterschiedlichen Artikeltypen (z.B. Post, Page, Custom Post Type) unterscheiden kann. Dementsprechend wird er auch nur dort mit Inhalt gefüllt.

Beispiele der Variablen:

  • post
    Wenn man Artikel des Typs “post” bearbeitet.
  • page
    Wenn man Seiten bearbeitet.
  • attachment
    Wenn man Dateien in der Mediathek bearbeitet.
  • usw.

Wie man den aktuellen Hook auslesen kann

Letztlich ist es nicht so schwer.

WordPress-Menüpunkte mit Dateinamen ansteuern

Für alle WordPress internen Seiten nutzt man den Dateinamen die WordPress aufruft (siehe oben). Das gilt für fast alle Obermenüpunkte sowie Untermenüpunkte die WordPress standardmäßig hat (z.B. für “Dashboard”, “Updates” (welches sich unter “Dashboard” befindet) und so weiter).

Beispiel:

<?php add_action( 'admin_print_scripts-users.php', 'meine_script_funktion'); ?>

Artikel, Seiten und andere Posttypen mit Dateinamen und $type_now

Alle Artikelseiten (dazu gehören auch Seiten und Custom Post Types) werden entweder mit:

  • post.php
  • post-new.php oder
  • edit.php

angesprochen. Die einzelnen Posttypen unterscheidet man dann innerhalb einer Funktion mit der globalen Variable $type_now.

Plugin-Menüpunkte mit dem Hook Suffix ansteuern

Menüpunkte, die man durch ein Plugin (also über die Funktionen add_menupage() oder add_submenu_page()) hinzugefügt hat werden mit dem so genannten Hook Suffix angesprochen. Das ist der Wert, den die Funktionen jeweils auch zurückgeben.

Beispiele:

  • Eigene Hauptmenüpunkte haben immer das Präfix toplevel_page_.
  • Untermenüpunkte hängen vom Obermenüpunkt ab. Erstellt man einen Menüpunkt unterhalb von “Einstellungen”, beginnt der Page Hook mit settings_page_.