Ich erstelle ein Plugin und möchte ein bisschen Javascript in den Admin-Kopf einfügen, aber nur für bestimmte Admin-Seiten. Ich meine nicht Seiten wie in einer WordPress-Seite, die Sie selbst erstellen, sondern bestehende Seiten im Admin-Bereich wie "Ihr Profil", "Benutzer" usw. Gibt es eine WP-Funktion speziell für diese Aufgabe? Ich habe gesucht und ich kann nur die Boolesche Funktion is_admin
und Aktions-Hooks finden, aber keine Boolesche Funktion, die nur prüft.
Verwenden Sie dazu den Hook "admin_enqueue_scripts", um die benötigten Dateien in die Warteschlange zu stellen. Diesem Hook wird ein $ hook_suffix übergeben, das sich auf die aktuell geladene Seite bezieht:
function my_admin_enqueue($hook_suffix) {
if($hook_suffix == 'appearance_page_theme-options') {
wp_enqueue_script('my-theme-settings', get_template_directory_uri() . '/js/theme-settings.js', array('jquery'));
wp_enqueue_style('my-theme-settings', get_template_directory_uri() . '/styles/theme-settings.css');
?>
<script type="text/javascript">
//<![CDATA[
var template_directory = '<?php echo get_template_directory_uri() ?>';
//]]>
</script>
<?php
}
}
add_action('admin_enqueue_scripts', 'my_admin_enqueue');
In wp-admin gibt es eine globale Variable namens $ pagenow , die den Namen der aktuellen Seite enthält, dh edit.php, post.php usw.
Sie können auch die $ _GET-Anforderung überprüfen, um Ihren Standort weiter einzugrenzen. Beispiel:
global $pagenow;
if (( $pagenow == 'post.php' ) && ($_GET['post_type'] == 'page')) {
// editing a page
}
if ($pagenow == 'users.php') {
// user listing page
}
if ($pagenow == 'profile.php') {
// editing user profile page
}
Die umfassendste Methode ist get_current_screen
, die in WordPress 3.1 hinzugefügt wurde
$screen = get_current_screen();
kehrt zurück
WP_Screen Object (
[action] =>
[base] => post
[id] => post
[is_network] =>
[is_user] =>
[parent_base] => edit
[parent_file] => edit.php
[post_type] => post
[taxonomy] =>
)
Um eine alternative Methode/Herangehensweise an die obige Frage anzubieten.
// When you are viewing the users list or your editing another user's profile
add_action( 'admin_print_scripts-users.php', 'your_enqueue_callback' );
// When you are editing your own profile
add_action( 'admin_print_scripts-profile.php', 'your_enqueue_callback' );
function your_enqueue_callback() {
wp_enqueue_script( .. YOUR ENQUEUE ARGS .. );
}
Diese Methode zielt direkter auf bestimmte Seiten ab und vermeidet, dass in Ihrem Rückruf bedingte Logik erforderlich ist (da Sie diese Unterscheidung bereits im ausgewählten Hook vorgenommen haben).
Ich finde es seltsam, dass niemand erwähnt hat, dass die Funktion add_menu_page einen Aktions-Hook zurückgibt, mit dem Sie bestimmte Aktionen nur auf diesen Seiten ausführen können
$hook = add_menu_page($menu_title, $page_title, $capability, $slug, $function, $icon_url, $position);
add_action( 'load-' . $hook, 'my_admin_enqueue_scripts' );
function my_admin_enqueue_scripts() {
wp_enqueue_script(/*...*/);
wp_enqueue_style(/*...*/);
}
Wenn Sie den $ -Hook benötigen und die Menüseite nicht selbst hinzugefügt haben, ist das Dokument hier
Zum Beispiel ist der Haken für eine Menüseite der obersten Ebene
load-toplevel_page_ $ MenuSlug
Der Haken für eine Untermenüseite ist
load- $ MenuSlug_page_ $ SubMenuSlug
Nach dieser Logik lautet der Haken für die Profilseite des Benutzers
load-users_page_profile