Come scopri quale pagina modello serve la pagina corrente?


54

Quando attivi un tema wordpress, è sempre una seccatura scoprire quale file andare per cambiare le cose. Qualche idea su come semplificare le cose?

D'altra parte, considerando la funzionalità get_template_part, questo potrebbe essere impossibile. Che ne dici?


1
Ispeziono l'html e trovo un tag identificato o qualcosa di unico.
Naoise Golden,

1
Visualizza il codice sorgente e cerca le classi del corpo che indicano quale modello viene utilizzato. Ti dà anche l'id
Brad Dalton,


@BradDalton +1. Specialmente quando non ci è permesso installare un plugin o scrivere una funzione per raggiungere l'obiettivo.
Subrata Sarkar,

Risposte:


34

Aggancia template_include, imposta un globale per annotare il modello impostato dal tema, quindi rileggi quel valore nel piè di pagina o nell'intestazione per vedere quale modello viene chiamato per una determinata vista.

Ho già parlato di questo hook di filtro in Ottieni il nome del file modello corrente , ma vai a prendere una copia di quel codice e plonk il functions.phpfile del tuo tema .

Quindi apri il tema header.phpo footer.php(o dove preferisci) e usa qualcosa come il seguente per stampare il modello corrente.

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

Se si desidera utilizzarlo in un sito di produzione e mantenere tali informazioni lontano dagli utenti non amministratori, aggiungere una piccola logica condizionale.

<?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() ); 
?>

Ora puoi tenere traccia di quali visualizzazioni stanno utilizzando quale modello, mantenendo queste informazioni lontano dai tuoi visitatori.


1
Se c'è qualcosa di sbagliato in questa risposta, o se qualcuno potrebbe fornire commenti su cosa si potrebbe fare per migliorare questa risposta, fallo, lascia un commento qui e condividi i tuoi pensieri e idee su come migliorarla.
t31os,

1
Non ha funzionato fratello, dice "Funzione indefinita"
Lucas Bustamante,

1
@LucasB stesso qui, questo è l'errore che ho avuto
Lincoln Bergeson il

Questo dovrebbe essereget_page_template
Blazemonger,

40

Bene, se tutto ciò che vuoi è controllare quale file modello è stato usato per generare la pagina corrente, allora non devi sporcarti le mani con il codice;)

C'è questo pratico plugin chiamato Debug Bar . È un valido aiuto in molte situazioni, compresa la tua. Dovresti assolutamente provarlo - per me e molti altri è un compagno indispensabile per qualsiasi sviluppo del WP.

Ho allegato uno screenshot che potrebbe farti innamorare ...

inserisci qui la descrizione dell'immagine

Per ottenere il debug barra di lavoro , è necessario attivare wp_debuge wp_savequeriesopzioni. Queste opzioni sono disabilitate per impostazione predefinita.

Prima di apportare modifiche, tuttavia, ci sono alcuni punti da tenere a mente:

  • Non farlo nell'ambiente di produzione a meno che il sito Web non soddisfi molto traffico.
  • Una volta terminato il debug, assicurati di disabilitare le opzioni (in particolare l'opzione wp_savequeries poiché influisce sulle prestazioni) del sito Web.

Per apportare le modifiche:

  1. Apri il wp_config.phpfile tramite un client ftp.
  2. Cerca wp_debugun'opzione. Modificalo in define( 'WP_DEBUG', true );. Se la linea non è presente, aggiungerla al file.
  3. Allo stesso modo, modifica o aggiungi la linea define( 'SAVEQUERIES', true );al file.
  4. Salva. Sei pronto per il debug.

Ulteriori informazioni: Codice


2
@justCallMeBiru - il plug-in Debug Bar non richiede WP_DEBUG e SAVEQUERIES, sebbene sia migliorato da loro.
Pat J,

3
L'esecuzione di un plug-in di questo tipo, solo per un po 'di informazioni, crea un sacco di imho overhead, ed è per questo che non l'ho suggerito nella mia risposta. Detto questo, chiaramente la gente preferisce questa risposta, sono curioso di sapere perché.
t31os,

23

Uso questa pratica funzione che visualizza il modello corrente solo per i super amministratori:

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

Spero che aiuti. :)


2
Questa è la risposta goto, dovrebbe essere accettata.
Web ibrido Dev

12

Aggiungi il seguente codice subito dopo la riga get_header in ogni file modello rilevante:

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

Nel tuo browser> visualizza sorgente, e il nome del modello verrà visualizzato come commento nel tuo codice html, ad es

<!-- page.php -->

è uno sforzo eccessivo per aggiungere questo ovunque
Adal, il

4

Il modo più semplice che ho trovato è includere la funzione WordPress sul tag body. Aggiungerà diverse classi a seconda della pagina che stai visualizzando (home per la prima pagina, pagina per pagina, ecc.).

Dai un'occhiata qui: http://codex.wordpress.org/Function_Reference/body_class

Inoltre è utile per il targeting di elementi con CSS su quelle pagine.

Anche conoscere la Gerarchia dei modelli (http://codex.wordpress.org/Template_Hierarchy) come menzionato da David R è una buona idea.



3

Una cosa molto semplice che faccio è inserire un commento HTML che identifichi il file modello in ogni file rilevante del tema, ad esempio nella parte superiore di index.php che ho

<!-- index -->

e nella parte superiore di front-page.php

<!-- front -->

Ma ovviamente questo richiede di modificare il tema. Sospetto che potresti aggiungere una funzione personalizzata nel file footer.php o header.php che ti dirà quale file è stato utilizzato. Il metodo sopra e la tabella di riferimento http://codex.wordpress.org/Template_Hierarchy sono ciò che tendo a usare.


3

C'è un plugin chiamato Theme Check che fa esattamente questo. Visualizza il nome del file modello corrente in uso come commento HTML.


3

Ecco qui:

Un elenco HTML con tutti i file modello in uso per la pagina di destinazione corrente, incluse tutte le parti modello da plugin, temi figlio e / o combinazioni di temi padre , il tutto in una riga di codice:

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>';

È possibile che sia necessario verificare che il server non restituisca barre rovinate in nessun percorso . Ricorda di posizionarlo dopo che tutti i file modello sono stati effettivamente utilizzati, come in footer.php, ma prima del rendering della barra di amministrazione .

se il admin-bar stuffpercorso viene visualizzato nella parte superiore o qualsiasi altro file, modifica il nome file template-loader.phpin questa riga di codice in: qualunque sia il nome file da cui devi interrompere. Spesso:class-wp-admin-bar.php

se ne hai bisogno nella barra di amministrazione, usa la priorità giusta (prima) per assicurarti che nessun file sia inserito alla fine di questo elenco. Per esempio:

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

la priorità -5fa shure che carica prima. La chiave è chiamare get_included_files()al momento giusto, altrimenti è necessario un po 'di array-popping!

Per rompere questo:

Non è possibile raccogliere tutti i file modello inclusi senza backtrace PHP. I super-globali all'interno template_include non li collezioneranno tutti . L'altro modo è quello di "posizionare un marcatore" in ciascun file modello, ma se devi prima interagire con i file, avanzi con il tempo e l'intera idea.

1) Dobbiamo controllare all'interno di tutti i file che sono stati utilizzati dall'attuale richiesta di Wordpress. E sono molti! Non sorprenderti se stai usando 300 file anche prima che le tue funzioni.php siano registrate.

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

Stiamo usando il get_included_files () nativo di PHP, convertendo le barre rovesciate in barre inverse in modo che corrispondano alla maggior parte dei percorsi di ritorno di Wordpress.

2) Stiamo tagliando quell'array da cui è registrato template-loader.php. Dopodiché, nei file get_included_files () popolati dovrebbero essere popolati solo i file modello.

/* 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) Ridurre i risultati, non è necessario il percorso fino a quando la cartella del tema o la cartella del plug-in, come modelli in uso, possono essere mescolati da plugin, temi o cartelle di temi figlio.

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

4) Infine, converti dall'array in un piacevole elenco HTML

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

Un'ultima modifica potrebbe essere necessario in part3) -Sostituzione , se si dont desidera è prevista l' dai plugin. Potrebbero chiamare in class-filesritardo e "intercettare" durante l'elaborazione dell'output del modello.

Tuttavia, ho trovato ragionevole lasciarli visibili, poiché l'idea è quella di tracciare ciò che è stato caricato , anche se non è un "modello" che rende l'output in questa fase.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.