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 de votre profil?

25

Je suis en train de construire un plugin et je souhaite ajouter des éléments 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.

    
posée racl101 19.01.2011 - 19:37

5 réponses

21

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');
    
réponse donnée prettyboymp 19.01.2011 - 20:08
50

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 davantage 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

    }
    
réponse donnée goldenapples 19.01.2011 - 19:48
13

La méthode la plus complète est get_current_screen ajoutée à WordPress 3.1

.
$screen = get_current_screen();

retourne

WP_Screen Object (
    [action] => 
    [base] => post
    [id] => post
    [is_network] => 
    [is_user] => 
    [parent_base] => edit
    [parent_file] => edit.php
    [post_type] => post
    [taxonomy] => 
)
    
réponse donnée Louis-Rémi 06.09.2013 - 15:41
8

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

    
réponse donnée t31os 27.01.2011 - 16:53
1

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, le document est ici

Par exemple, le crochet pour une page de menu de niveau supérieur est

  

load-toplevel_page_ $ MenuSlug

Le point d'ancrage d'une page de sous-menu est

.
  

load- $ MenuSlug_page_ $ SubMenuSlug

Suivant cette logique, le raccordement de la page de profil de l'utilisateur est

.
  

load-users_page_profile

    
réponse donnée Tofandel 24.10.2017 - 20:28

Lire d'autres questions sur les étiquettes