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 stuff
caminho estiver aparecendo na parte superior ou em qualquer outro arquivo, altere o nome do arquivo template-loader.php
nesta 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 -5
faç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-files
tarde 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.