Como você pode verificar se está em uma página específica na seção Admin do WP? Por exemplo, como posso verificar se estou na página Usuários> Seu perfil?

32

Estou criando um plug-in e quero adicionar bits de javascript no cabeçalho do administrador, mas apenas para determinadas páginas de administrador. Não me refiro a páginas como em uma página do WordPress criada por você, mas a páginas de seção de administração existentes como "Seu perfil", "Usuários" etc. Existe uma função wp específica para esta tarefa? Eu estive procurando e só consigo encontrar os is_adminganchos de função e ação booleanos, mas não uma função booleana que apenas verifica.

racl101
fonte
1
Um leve empurrão para lembrá-lo de que uma resposta não foi aceita. Se nenhuma das respostas fornecidas responder à sua pergunta suficientemente ou você estiver com dificuldades para entender as informações fornecidas, comente para nos informar.
t31os

Respostas:

24

A maneira de fazer isso é usar o gancho 'admin_enqueue_scripts' para colocar na fila os arquivos necessários. Este gancho receberá um $ hook_suffix relacionado à página atual 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');
prettyboymp
fonte
55

Existe uma variável global no wp-admin chamada $ pagenow que contém o nome da página atual, ou seja, 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

    }
maçãs douradas
fonte
1
global $pagenow; if ( ( 'admin.php' === $pagenow ) && ( 'prefix-theme-settings' === $_GET['page'] ) ) { logic.. }por exemplo, verifica se você está em uma página de configurações de temas personalizados admin.php?page=prefix-theme-settings.
Lowtechsun
19

O método mais abrangente é get_current_screenadicionado 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] => 
)
Louis-Rémi
fonte
3
"Restrições de uso - Esta função é definida na maioria das páginas de administração, mas não em todas. Portanto, há casos em que is_admin () retornará verdadeiro, mas a tentativa de chamar get_current_screen () resultará em um erro fatal porque não está definido. O exemplo conhecido é wp-admin / customize.php. A função retorna null se for chamada a partir do gancho admin_init. Deve ser bom usá-lo em um gancho posterior, como current_screen. "- Codex .
Aquele cara brasileiro
@ThatBrazilianGuy Uma verificação rápida sugere que esse não é mais o caso, pelo que vejo get_current_screen()é seguro para uso em todas as páginas de administração.
shahar 27/01
1
@shahar este ainda é o caso, de acordo com a documentação vinculada acima e minha experiência.
fabrik 14/03
9

Oferecer um método / abordagem alternativo 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 .. );
}

Esse método direciona 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).

t31os
fonte
Gostaria de saber por que essa resposta não obteve mais votos, cobre o caso de uso exato da pergunta e fornece a solução em uma quantidade mínima de código. O feedback seria bom ..
t31os 28/01
3

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 executar determinadas 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 gancho $ e não adicionou a página do menu, o documento está 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

Tofandel
fonte