Je construis un plugin et je veux ajouter des morceaux de javascript dans la tête d'administrateur, mais uniquement pour certaines pages d'administrateur. Je ne parle pas des pages comme dans une page WordPress que vous créez vous-même, mais plutôt des pages de sections d’administrations existantes telles que "Votre profil", "Utilisateurs", etc. Existe-t-il une fonction wp spécifiquement pour cette tâche? J'ai cherché et je ne trouve que la fonction booléenne is_admin
et les crochets d'action, mais pas une fonction booléenne qui se contente de vérifier.
Pour ce faire, utilisez le hook 'admin_enqueue_scripts' pour mettre en file d'attente les fichiers dont vous avez besoin. Ce hook sera passé un $ hook_suffix qui se rapporte à la page actuelle qui est chargée:
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');
Il existe une variable globale dans wp-admin appelée $ pagenow qui contient le nom de la page en cours, à savoir edit.php, post.php, etc.
Vous pouvez également consulter la requête $ _GET pour préciser votre position, par exemple:
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
}
La méthode la plus complète est get_current_screen
ajouté dans WordPress 3.1
$screen = get_current_screen();
résultats
WP_Screen Object (
[action] =>
[base] => post
[id] => post
[is_network] =>
[is_user] =>
[parent_base] => edit
[parent_file] => edit.php
[post_type] => post
[taxonomy] =>
)
Offrir une méthode/approche alternative à la question ci-dessus.
// 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 .. );
}
Cette méthode cible plus directement les pages spécifiques et évite le recours à une logique conditionnelle dans votre rappel (car vous avez déjà fait cette distinction dans le hook sélectionné).
Je trouve ça étrange que personne n'ait mentionné le fait que la fonction add_menu_page renvoie un hook d'action que vous pouvez utiliser pour effectuer certaines actions uniquement sur ces pages.
$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(/*...*/);
}
Si vous avez besoin du crochet $ et que vous n'avez pas ajouté la page de menu vous-même, le doc est ici
Par exemple, le crochet pour une page de menu de niveau supérieur est
load-toplevel_page_ $ MenuSlug
Le crochet pour une page de sous-menu est
load- $ MenuSlug_page_ $ SubMenuSlug
Suivant cette logique, le crochet pour la page de profil de l'utilisateur est
load-users_page_profile