Stampa il nome del template WordPress per il debug
Ho preso in carico la manutenzione di un grande sito basato su WP-MS. Il sito ha circa 200 template, molti specifici per pagina e senza una procedura di denominazione standard.
Risparmierei molto tempo se, mentre navigo nel sito, potessi vedere i nomi dei template che compongono la pagina corrente. È possibile? Ho esaminato i plugin di debug per WordPress, ma sembrano focalizzati su variabili e query SQL, non sui template.
Le seguenti funzioni fanno 3 cose:
- Mostrano la gerarchia dei template per la richiesta corrente
- Mostrano il tema in uso (vengono mostrati 2 modi per ottenere questo risultato)
- Mostrano il template corrente in uso per la richiesta *)
*) Allega il filtro al contenuto. Potresti dover giocare con i condizionali o le capability a seconda del tuo ruolo. Finora non conosco una soluzione per mostrare il template della pagina per archivi e richieste simili di tipo lista.
// Non è così facile da leggere:
var_dump( get_required_files() );
/**
* Mostra la gerarchia dei template e il tema alla fine della richiesta/pagina.
* @return void
*/
function wpse31909_template_info()
{
// Non mostrare per utenti non amministratori
if ( ! current_user_can( 'manage_options' ) )
return;
// Devi costruire tu stesso la gerarchia qui o da qualche parte prima della funzione
global $wp_template_hierarchy;
$content = '<pre>';
// Mostra la gerarchia dei template
$content .= "GERARCHIA DEI TEMPLATE\n==================\n";
$content .= var_export( $wp_template_hierarchy, true );
// Mostra il tema corrente in uso:
$content .= "\n\nTEME CORRENTE\n=============\n";
$content .= var_export( get_option( 'template' ), true );
// oppure:
# $content .= var_export( get_template(), true );
$content .= '</pre>';
return print $content;
}
add_action( 'shutdown', 'wpse31909_template_info' );
/**
* Mostra il template nelle visualizzazioni singole allegato alla fine del contenuto per gli amministratori
* @return $content
*/
function wpse31909_template_to_content( $content )
{
// Mostra il contenuto standard per utenti non amministratori e non in visualizzazione singola di post/pagina/cpt/allegato.
if ( ! current_user_can( 'manage_options' ) && ! is_singular() )
return $content;
$content .= '<pre>';
// Mostra il template corrente in uso: Deve essere nel loop per ottenere il global $post
$content .= var_export( get_post_meta( $GLOBALS['post']->ID, '_wp_page_template' ), true );
$content .= '</pre>';
return $content;
}
add_filter( 'the_content', 'wpse31909_template_to_content' );

Forse potrebbe funzionare se colleghi anche la seconda funzione al filtro the_excerpt
. Immagino che in questo modo apparirebbe anche nelle viste elenco. @Tutti Sentitevi liberi di modificare e ampliare questa risposta.

@t31os Non vuoi correggerlo? Porta +2 punti reputazione ad ogni upvote. Grazie comunque :)

Utilizzo questo codice per stampare semplicemente il nome del file del template in cima alla pagina a scopo di debug.
// Per debug - mostra il file del template
add_action('wp_head', 'show_template');
function show_template() {
global $template;
print_r($template);
}

Anche se non è direttamente una risposta alla domanda in questione, probabilmente vale la pena notare qui che WordPress aggiunge per impostazione predefinita un nome di classe al tag <body>
per i template di pagina personalizzati. Quindi, ad esempio, se stai visualizzando una pagina che ha un template personalizzato e il nome del file del template è custom.php, allora verrà aggiunta una classe con nome page-template-custom
al tag <body>
.
La documentazione su questa funzionalità può essere trovata qui: https://codex.wordpress.org/Function_Reference/body_class#Page
