Como você descobre qual página de modelo está servindo a página atual?

54

Quando você ativa um tema wordpress, é sempre um aborrecimento descobrir qual arquivo deve ser alterado. Alguma idéia de como simplificar as coisas?

Mas, por outro lado, considerando a funcionalidade get_template_part, isso pode ser impossível. O que você disse?

Joe Médio
fonte
11
Inspeciono o html e encontro uma etiqueta identificada ou algo único.
Naoise Golden
11
Veja o código-fonte e procure as classes do corpo que informam qual modelo é usado. Também lhe dá a identificação
Brad Dalton
Possível duplicata de Obter nome do arquivo de modelo atual
Burgi 13/06
@BradDalton +1. Especialmente quando não temos permissão para instalar um plug-in ou escrever uma função para atingir a meta.
Subrata Sarkar

Respostas:

34

Conecte-se a template_include, defina um global para observar o modelo definido pelo tema e, em seguida, leia esse valor novamente no rodapé ou cabeçalho para ver qual modelo está sendo chamado para uma determinada visualização.

Eu falei sobre esse gancho de filtro antes em Obter o nome do arquivo de modelo atual , mas pegue uma cópia desse código e digite-o no functions.phparquivo do seu tema .

Em seguida, abra o tema header.phpou footer.php(ou onde quiser) e use algo como o seguinte para imprimir o modelo atual.

<div><strong>Current template:</strong> <?php get_current_template( true ); ?></div>

Se você quiser usar isso em um site de produção e manter essas informações longe dos usuários não administradores, adicione um pouco de lógica condicional.

<?php 
// If the current user can manage options(ie. an admin)
if( current_user_can( 'manage_options' ) ) 
    // Print the saved global 
    printf( '<div><strong>Current template:</strong> %s</div>', get_current_template() ); 
?>

Agora você pode acompanhar quais visualizações estão usando qual modelo, mantendo essas informações longe dos visitantes.

t31os
fonte
11
Se houver algo errado com esta resposta, ou se alguém puder fornecer comentários sobre o que poderia ser feito para melhorar essa resposta, deixe um comentário aqui e compartilhe seus pensamentos e idéias sobre como melhorá-la.
t31os 28/01
11
Não funcionou bro, ele diz que "a função Undefined"
Lucas Bustamante
11
@LucasB mesmo aqui, esse é o erro que eu tenho
Lincoln Bergeson
Este deve serget_page_template
Blazemonger
40

Bem, se tudo o que você deseja é verificar qual arquivo de modelo foi usado para gerar a página atual, não será necessário sujar as mãos com código;)

Existe um plugin útil chamado Barra de Depuração . É um grande auxiliar em muitas situações, incluindo a sua. Você definitivamente deveria dar uma olhada - para mim e para muitos outros, é um companheiro indispensável para qualquer desenvolvimento de WP.

Anexei uma captura de tela que pode fazer você se apaixonar ...

insira a descrição da imagem aqui

Para que a Barra de Depuração funcione , é necessário ativar wp_debuge wp_savequeriesopções. Essas opções estão no estado desativado por padrão.

Antes de fazer alterações, porém, há alguns pontos a serem lembrados:

  • Não faça isso no ambiente de produção, a menos que o site não atenda a muito tráfego.
  • Depois de concluir a depuração, desabilite as opções (especialmente a opção wp_savequeries, pois afeta o desempenho) do site.

Para fazer as alterações:

  1. Abra o wp_config.phparquivo através de um cliente ftp.
  2. Procure a wp_debugopção Edite para define( 'WP_DEBUG', true );. Se a linha não estiver presente, adicione-a ao arquivo.
  3. Da mesma forma, edite ou adicione a linha define( 'SAVEQUERIES', true );ao arquivo.
  4. Salve . Você está pronto para depurar.

Mais informação: Codex

Michal Mau
fonte
2
@justCallMeBiru - o plug-in da Barra de Depuração não requer WP_DEBUG e SAVEQUERIES, embora seja aprimorado por eles.
Pat J
3
A execução de um plug-in, apenas para um pedacinho de informação, cria imho de sobrecarga e, portanto, é por isso que não o sugeri na minha própria resposta. Dito isto, claramente as pessoas preferem essa resposta, estou curioso para saber por que.
T31os
23

Eu uso essa função útil que exibe o modelo atual apenas para superadministradores:

function show_template() {
    if( is_super_admin() ){
        global $template;
        print_r($template);
    } 
}
add_action('wp_footer', 'show_template');

Espero que ajude. :)

mightypixel
fonte
2
Esta é a resposta Goto, deve ser aceito.
Hybrid Web Dev
12

Adicione o seguinte código logo após a linha get_header em cada arquivo de modelo relevante:

<!-- <?php echo basename( __FILE__ ); ?> -->

No seu navegador> visualize a fonte e o nome do modelo será exibido como um comentário no seu código html, por exemplo,

<!-- page.php -->
ronald
fonte
é muito esforço adicionar isso em todos os lugares
Adal
4

A maneira mais fácil que encontrei é incluir a função WordPress na etiqueta do corpo. Ele adicionará várias classes, dependendo da página que você está visualizando (página inicial, página por página, etc.).

Confira aqui: http://codex.wordpress.org/Function_Reference/body_class

Além disso, é útil para segmentar elementos com CSS nessas páginas.

Conhecer a Hierarquia de modelos (http://codex.wordpress.org/Template_Hierarchy) como David R mencionou também é uma boa idéia.

CookiesForDevo
fonte
4

Há outro plug-in mais básico especificamente para esse fim. Estou inclinado a instalar a barra de depuração, porque esses outros recursos parecem úteis, mas esse é mais básico e específico para esse fim: http://wordpress.org/extend/plugins/what-the-file/

Julian K
fonte
3

Uma coisa muito simples que faço é inserir um comentário HTML identificando o arquivo de modelo em cada arquivo relevante do tema, por exemplo, na parte superior do index.php.

<!-- index -->

e no topo do front-page.php

<!-- front -->

Mas, obviamente, isso requer a modificação do tema. Eu suspeito que você poderia adicionar uma função personalizada no arquivo footer.php ou header.php que informaria qual arquivo estava sendo usado. O método acima e o quadro de referência http://codex.wordpress.org/Template_Hierarchy são os que eu costumo usar.


fonte
3

Existe um plugin chamado Theme Check que faz exatamente isso. Ele exibe o nome do arquivo de modelo atual em uso como um comentário HTML.

navjotjsingh
fonte
3

Aqui está:

Uma lista HTML com todos os arquivos de modelo em uso na página de destino atual, incluindo todas as partes do modelo de plug-ins, tema filho e / ou combinações de tema pai , tudo em uma linha de código:

echo '<ul><li>'.implode('</li><li>', str_replace(str_replace('\\', '/', ABSPATH).'wp-content/', '', array_slice(str_replace('\\', '/', get_included_files()), (array_search(str_replace('\\', '/', ABSPATH).'wp-includes/template-loader.php', str_replace('\\', '/', get_included_files())) + 1)))).'</li></ul>';

Você pode precisar verificar se o servidor não retorna barras duplas em nenhum caminho . Lembre-se de colocá-lo depois que todos os arquivos de modelo foram realmente usados, como no footer.php, mas antes da barra de administração renderizar .

se o admin-bar stuffcaminho estiver aparecendo na parte superior ou em qualquer outro arquivo, altere o nome do arquivo template-loader.phpnesta linha de código para: qualquer nome de arquivo do qual você precise interromper. Frequentemente:class-wp-admin-bar.php

se você precisar disso na barra de administração, use a prioridade certa (antes) para garantir que nenhum arquivo seja inserido no final desta lista. Por exemplo:

add_action('admin_bar_menu', 'my_adminbar_template_monitor', -5);

prioridade -5faça com que ele carregue primeiro. A chave é ligar get_included_files()no momento certo, caso contrário, é necessário algum pop-array!

Para terminar:

Você não pode coletar todos os arquivos de modelo incluídos sem o retorno do PHP. Superglobais dentro template_include não vão colecioná-los todos . A outra maneira é "colocar um marcador" em cada arquivo de modelo, mas se você precisar interagir primeiro com os arquivos, discordará do tempo e de toda a idéia.

1) Precisamos verificar dentro de todos os arquivos que foram usados ​​pela solicitação atual do Wordpress. E eles são muitos! Não se surpreenda se você estiver usando 300 arquivos antes que o seu functions.php seja registrado.

$included_files = str_replace('\\', '/', get_included_files());

Estamos usando o get_included_files () nativo do PHP, convertendo barras invertidas em barras invertidas para corresponder à maioria dos caminhos de retorno do Wordpress.

2) Estamos cortando essa matriz de onde o template-loader.php está registrado. Depois disso, os get_included_files () preenchidos devem ter apenas arquivos de modelo preenchidos.

/* The magic point, we need to find its position in the array */
$path = str_replace('\\', '/', ABSPATH);
$key = $path.'wp-includes/template-loader.php';
$offset = array_search($key, $included_files);

/* Get rid of the magic point itself in the new created array */
$offset = ($offset + 1);
$output = array_slice($included_files, $offset);

3) Diminua os resultados, não precisamos do caminho até que a pasta de temas ou a pasta de plugins, como modelos em uso, possam ser misturados a partir de plugins, pastas de temas ou de temas filhos.

$replacement = $path.'wp-content/';
$output = str_replace($replacement, '', $output);

4) Finalmente, converta da matriz para uma boa lista HTML

$output = '<ul><li>'.implode('</li><li>', $output).'</li></ul>';

Uma última modificação pode ser necessária em part3) -replacement , se você não deseja incluir os plugins. Eles podem ligar class-filestarde e "interceptar" durante o processamento da saída do modelo.

No entanto, achei razoável deixá-los visíveis, pois a idéia é rastrear o que foi carregado , mesmo que não seja um "modelo" que renderize a saída nesse estágio.

Jonas Lundman
fonte