Comment pouvez-vous vérifier si vous vous trouvez dans une page particulière de la section Admin de WP? Par exemple, comment puis-je vérifier si je suis dans la page Utilisateurs> Votre profil?

32

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_adminet les crochets d'action, mais pas une fonction booléenne qui se contente de vérifier.

racl101
la source
1
Un petit coup de pouce pour vous rappeler qu'une réponse n'a pas été acceptée. Si aucune des réponses fournies ne répond suffisamment à votre question ou si vous avez du mal à comprendre les informations fournies, merci de nous le faire savoir.
T31os

Réponses:

24

Pour ce faire, utilisez le crochet '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');
prettyboymp
la source
55

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

    }
pommes d'or
la source
1
global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. }par exemple, vérifie si vous êtes sur une page de paramètres de thème personnalisés admin.php?page=prefix-theme-settings.
lowtechsun
19

La méthode la plus complète est get_current_screenajoutée 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] => 
)
Louis-Rémi
la source
3
"Restrictions d'utilisation - Cette fonction est définie sur la plupart des pages d'administration, mais pas sur toutes. Par conséquent, il y a des cas où is_admin () renvoie true, mais la tentative d'appel de get_current_screen () entraîne une erreur fatale car elle n'est pas définie. L’exemple connu est wp-admin / personnaliser.php. La fonction renvoie la valeur null si elle est appelée depuis le hook admin_init. Elle devrait pouvoir être utilisée dans un hook ultérieur, tel que current_screen. "- Codex .
Ce Brésilien Guy
@ThatBrazilianGuy Une rapide vérification suggère que ce n'est plus le cas, pour autant que je sache, il get_current_screen()est sécuritaire de l'utiliser sur toutes les pages d'administration.
Shahar
1
@shahar c'est toujours le cas, selon la documentation liée ci-dessus et mon expérience.
fabrik
9

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é).

t31os
la source
Je voudrais savoir pourquoi cette réponse n'a pas obtenu plus de votes, couvre le cas d'utilisation exact de la question et fournit la solution dans un minimum de code. Les commentaires seraient bien ..
t31os
3

Je trouve ça bizarre 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, la 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

Tofandel
la source