Como você pode verificar se está em uma determinada página na seção do WP Admin? Por exemplo, como posso verificar se estou na página Users Your Profile?

25

Estou criando um plug-in e quero adicionar bits de javascript no cabeçalho do administrador, mas apenas para determinadas páginas do administrador. Não me refiro a páginas como em uma página do WordPress que você mesmo cria, mas a páginas de seções de administração existentes como 'Seu perfil', 'Usuários', etc. Existe uma função wp especificamente para essa tarefa? Eu tenho procurado e só posso encontrar a função booleana is_admin e ganchos de ação, mas não uma função booleana que apenas verifica.

    
por racl101 19.01.2011 / 19:37

5 respostas

21

A maneira de fazer isso é usar o gancho 'admin_enqueue_scripts' para enfileirar os arquivos que você precisa. Este gancho será passado por um $ hook_suffix que se relaciona com a página atual que está carregada:

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');
    
por prettyboymp 19.01.2011 / 20:08
50

Existe uma variável global no wp-admin chamada $ pagenow que contém o nome da página atual, ie edit.php, post.php, etc.

Você também pode verificar a solicitação $ _GET para restringir ainda mais sua localização, por exemplo:

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

    }
    
por goldenapples 19.01.2011 / 19:48
13

O método mais abrangente é get_current_screen adicionado no WordPress 3.1

$screen = get_current_screen();

retorna

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

Oferecer um método / abordagem alternativa para a pergunta acima.

// 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 .. );
}

Este método tem como alvo as páginas específicas mais diretamente e evita a necessidade de lógica condicional dentro do seu retorno de chamada (porque você já fez essa distinção no gancho selecionado).

    
por t31os 27.01.2011 / 16:53
1

Acho estranho que ninguém tenha mencionado o fato de que a função add_menu_page retorna um gancho de ação que você pode usar para fazer certas ações apenas nessas páginas

$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(/*...*/);
}

Se você precisa do $ hook e não adicionou a página do menu, o documento é aqui

Por exemplo, o gancho para uma página de menu de nível superior é

  

load-toplevel_page_ $ MenuSlug

O gancho para uma página de submenu é

  

load- $ MenuSlug_page_ $ SubMenuSlug

Seguindo essa lógica, o gancho para a página de perfil do usuário é

  

load-users_page_profile

    
por Tofandel 24.10.2017 / 20:28