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

47

Quando você ativa um tema wordpress, é sempre um incômodo descobrir qual arquivo vai mudar as coisas. Alguma ideia de como simplificar as coisas?

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

    
por Average Joe 24.12.2011 / 21:32
fonte

9 respostas

31

Conecte-se a template_include , defina um global para anotar o modelo definido pelo tema e leia esse valor de volta no rodapé ou no cabeçalho para ver qual modelo está sendo chamado para uma determinada vista.

Eu falei sobre esse gancho de filtro antes em Get name of the current arquivo de modelo , mas pegue uma cópia desse código e plunte-o ao arquivo functions.php do seu tema .

Em seguida, abra o tema header.php ou footer.php (ou onde você 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 de seus 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 o modelo, mantendo essas informações longe de seus visitantes.

    
por t31os 26.12.2011 / 13:57
fonte
34

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

Existe este prático plug-in chamado Debug Bar . É um grande ajudante em muitas situações, incluindo a sua. Você deve definitivamente dar uma olhada - para mim e para muitos outros, é um companheiro indispensável para qualquer desenvolvimento de WP.

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

ParaobteraBarradedepuraçãoemfuncionamento,vocêprecisaativarasopçõeswp_debugewp_savequeries.Essasopçõesestãonoestadodesativadoporpadrão.

Antesdefazerqualqueralteração,háalgunspontosaseremlembrados:

  • Nãofaçaissonoambientedeprodução,amenosqueositenãoatendaamuitotráfego.
  • Apósconcluiradepuração,certifique-sededesativarasopções(especialmenteaopçãowp_savequeries,poisissoafetaodesempenho)dosite.

Parafazerasalterações:

  1. Abraoarquivowp_config.phppormeiodeumclienteFTP.
  2. Pesquiseaopçãowp_debug.Edite-oparadefine('WP_DEBUG',true);.Sealinhanãoestiverpresente,adicione-aaoarquivo.
  3. Damesmaforma,editeouadicionealinhadefine('SAVEQUERIES',true);aoarquivo.
  4. Salvar.Vocêestáprontoparadepurar.

Maisinformações: Codex

    
por Michal Mau 26.12.2011 / 19:16
fonte
14

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

    
por mightypixel 23.01.2014 / 14:06
fonte
13

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 > ver a fonte, e o nome do modelo será exibido como um comentário no seu código html, por exemplo,

<!-- page.php -->
    
por ronald 27.12.2011 / 19:32
fonte
4

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

Confira aqui: enlace

Além disso, é útil 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 ideia.

    
por CookiesForDevo 25.12.2011 / 13:51
fonte
4

Existe outro plugin mais específico especificamente para essa finalidade. Eu estou inclinado para instalar a barra de depuração, porque esses outros recursos parecem úteis, mas este é mais básico e especificamente para essa finalidade: enlace

    
por Julian K 29.01.2013 / 05:22
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, no topo do index.php eu tenho

<!-- index -->

e no topo do front-page.php

<!-- front -->

Mas, obviamente, isso requer modificar o 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 gráfico de referência enlace são o que eu costumo usar.

    
por David R 24.12.2011 / 21:40
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.

    
por navjotjsingh 26.12.2011 / 21:31
fonte
3

Aqui você vai:

Uma lista HTML com todos arquivos de modelo em uso para a página de destino atual, incluindo todas as partes de modelo de plug-ins, tema infantil 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 seu servidor não retorna as barras de dubble em qualquer caminho . Lembre-se de colocar isso depois que todos os arquivos de modelo forem usados, como em footer.php, mas antes da barra de administração renderizar .

se admin-bar stuff caminho estiver aparecendo na parte superior, ou qualquer outro arquivo, altere o nome do arquivo template-loader.php nesta linha de código para: qualquer nome de arquivo que você precise quebrar. Frequentemente: class-wp-admin-bar.php

se você precisar disso na barra de administração, use a priotity correta (mais antiga) para garantir que nenhum arquivo seja inserido no final dessa lista. Por exemplo:

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

priority -5 garante que ele seja carregado primeiro. A chave é chamar get_included_files() no momento certo, caso contrário, é necessário algum tipo de pop-up!

Para resolver isso:

Você não pode coletar todos os arquivos de modelo incluídos sem o PHP backtrace. Superglobals dentro de template_include não coletará todos . A outra maneira é "colocar um marcador" em cada arquivo de modelo, mas se você precisar interagir primeiro com os arquivos, você terá tempo e 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 mesmo que suas funções sejam registradas.

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

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

2) Estamos cortando essa matriz de onde o template-loader.php está registrado. Depois disso, o get_included_files () preenchido deve 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) Encurte os resultados, não precisamos do caminho até a pasta do tema ou pasta do plug-in, como modelos em uso, pode ser misturado de plugins, tema ou pastas de temas infantis.

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

4) Finalmente, converta de array para uma boa lista HTML

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

Uma última modificação pode ser necessária na parte 3) -replacement , se você não quiser necessário inclui por plugins. Eles podem chamar class-files late e "interceptar" durante o processamento de 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 "template" que renderiza a saída neste estágio.

    
por Jonas Lundman 15.09.2017 / 08:14
fonte

Tags