web-dev-qa-db-fra.com

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

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.

32
racl101

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');
23
prettyboymp

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

    }
53
goldenapples

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] => 
)
18
Louis-Rémi

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

9
t31os

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

3
Tofandel