Comment savoir quelle page de modèle sert la page actuelle?

54

Lorsque vous activez un thème wordpress, il est toujours fastidieux de savoir quel fichier utiliser pour changer les choses. Une idée de comment simplifier les choses?

Mais d'un autre côté, compte tenu de la fonctionnalité get_template_part, cela peut être impossible. Que dis-tu?

Joe moyen
la source
1
J'inspecte le code HTML et trouve une étiquette identifiée ou quelque chose d'unique.
Naoise Golden
1
Affichez le code source et recherchez les classes de corps qui vous indiquent quel modèle est utilisé. Vous donne également l'id
Brad Dalton
Possibilité de dupliquer le nom Get du fichier de modèle actuel
Burgi
@ BradDalton +1. Surtout lorsque nous ne sommes pas autorisés à installer un plugin ou à écrire une fonction pour atteindre l'objectif.
Subrata Sarkar

Réponses:

34

Accrochez-vous template_include, définissez une variable globale pour noter le modèle défini par le thème, puis relisez cette valeur dans le pied de page ou dans l'en-tête pour voir quel modèle est appelé pour une vue donnée.

J'ai déjà parlé de ce crochet de filtre dans Obtenir le nom du fichier de modèle actuel , mais allez récupérer une copie de ce code et copiez-le dans le functions.phpfichier de votre thème .

Puis ouvrez le thème header.phpou footer.php(ou où que vous soyez) et utilisez ce qui suit pour imprimer le modèle actuel.

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

Si vous souhaitez utiliser cela sur un site de production et garder ces informations à l'écart de vos utilisateurs non-administrateurs, ajoutez un peu de logique conditionnelle.

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

Vous pouvez désormais suivre les vues en utilisant quel modèle, tout en gardant ces informations à l'écart de vos visiteurs.

t31os
la source
1
S'il y a quelque chose qui ne va pas dans cette réponse, ou si quelqu'un peut commenter ce qui pourrait être fait pour améliorer cette réponse, laissez-le tomber, laissez un commentaire ici et partagez vos pensées et idées sur la façon de l'améliorer.
t31os
1
Ça n'a pas marché, on lit "Fonction non définie"
Lucas Bustamante
1
@LucasB idem ici, c'est l'erreur que j'ai eu
Lincoln Bergeson
Cela devrait êtreget_page_template
Blazemonger
40

Eh bien, si tout ce que vous voulez, c'est vérifier quel fichier de gabarit a été utilisé pour générer la page actuelle, vous n'avez pas besoin de vous salir les mains avec du code;)

Il y a ce plugin pratique appelé Debug Bar . C'est une aide précieuse dans de nombreuses situations, y compris la vôtre. Vous devriez absolument y jeter un coup d'œil - pour moi et beaucoup d'autres, c'est un compagnon indispensable pour tout développement WP.

J'ai joint une capture d'écran qui pourrait vous faire tomber amoureux ...

entrez la description de l'image ici

Pour obtenir la barre de débogage travail , vous devez activer wp_debuget wp_savequeriesoptions. Ces options sont désactivées par défaut.

Avant de procéder à des modifications, il convient de garder quelques points à l’esprit:

  • Ne le faites pas dans un environnement de production, sauf si le site Web ne génère pas beaucoup de trafic.
  • Une fois le débogage terminé, veillez à désactiver les options (en particulier l’option wp_savequeries car elle affecte les performances) du site Web.

Pour faire les changements:

  1. Ouvrir le wp_config.phpfichier via un client FTP.
  2. Recherche d' wp_debugoption. Modifiez-le define( 'WP_DEBUG', true );. Si la ligne n'est pas présente, ajoutez-la au fichier.
  3. De même, modifiez ou ajoutez la ligne define( 'SAVEQUERIES', true );au fichier.
  4. Sauver. Vous êtes prêt à déboguer.

Plus d'infos: Codex

Michal Mau
la source
2
@justCallMeBiru - le plug-in Debug Bar ne nécessite pas WP_DEBUGet SAVEQUERIES, bien qu'il soit amélioré par eux.
Pat J
3
Exécuter un tel plugin, juste pour un bit d’information, crée beaucoup d’imho supplémentaire, et c’est pourquoi je ne l’avais pas suggéré dans ma propre réponse. Cela dit, les gens préfèrent clairement cette réponse, je suis curieux de savoir pourquoi.
t31os
23

J'utilise cette fonction pratique qui affiche le modèle actuel uniquement pour les super-administrateurs:

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

J'espère que ça t'as aidé. :)

pourraitypixel
la source
2
C'est la réponse à goto, devrait être acceptée.
Hybrid Web Dev
12

Ajoutez le code suivant juste après la ligne get_header dans chaque fichier de modèle pertinent:

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

Dans votre navigateur> voir la source, le nom du modèle sera affiché comme un commentaire dans votre code HTML, par exemple:

<!-- page.php -->
Ronald
la source
c'est trop d'effort pour ajouter ceci partout
Adal
4

Le moyen le plus simple que j'ai trouvé est d'inclure la fonction WordPress sur la balise body. Il va ajouter plusieurs classes en fonction de la page affichée (home pour le premier plan, page pour page, etc.).

Découvrez-le ici: http://codex.wordpress.org/Function_Reference/body_class

De plus, il est utile de cibler des éléments avec CSS sur ces pages.

Apprendre à connaître la hiérarchie des modèles (http://codex.wordpress.org/Template_Hierarchy), comme l'a mentionné David R, est également une bonne idée.

CookiesForDevo
la source
4

Il existe un autre plug-in plus simple, spécialement conçu à cet effet. Je suis plutôt enclin à installer la barre de débogage, car ces autres fonctionnalités semblent utiles, mais celle-ci est plus simple et plus spécifique à cette fin: http://wordpress.org/extend/plugins/what-the-file/

Julian K
la source
3

Une chose très simple que je fais est d’insérer un commentaire HTML identifiant le fichier modèle dans chaque fichier pertinent du thème, par exemple en haut de index.php.

<!-- index -->

et en haut de front-page.php

<!-- front -->

Mais évidemment, cela nécessite de modifier le thème. Je suppose que vous pourriez ajouter une fonction personnalisée dans le fichier footer.php ou dans le fichier header.php, qui indiquerait le fichier utilisé. La méthode ci-dessus et le tableau de référence http://codex.wordpress.org/Template_Hierarchy sont ce que j'ai tendance à utiliser.


la source
3

Il y a un plugin nommé Theme Check qui fait exactement cela. Il affiche le nom du fichier de modèle actuel utilisé comme commentaire HTML.

navjotjsingh
la source
3

Voici:

Une liste HTML contenant tous les fichiers de modèle utilisés pour la page d'arrivée actuelle, y compris toutes les parties de modèle de plug-ins, de thème enfant et / ou de combinaison de thème parent , le tout dans une seule ligne de code:

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

Vous POUVEZ peut-être avoir besoin de vérifier que votre serveur ne renvoie aucune barre oblique double . N'oubliez pas de placer ceci après que tous les fichiers de modèle aient été utilisés, comme dans footer.php, mais avant que la barre d'administration ne soit restituée .

Si admin-bar stuffpath est affiché en haut, ou dans tout autre fichier, remplacez le nom template-loader.phpde fichier dans cette ligne de code par: quel que soit le nom de fichier que vous souhaitez interrompre. Souvent:class-wp-admin-bar.php

si vous en avez besoin dans la barre d’administration, utilisez la bonne priotité (la plus ancienne) pour vous assurer qu’aucun fichier n’est entré à la fin de cette liste. Par exemple:

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

La priorité est de -5faire en sorte qu'elle soit chargée en premier. La clé est d'appeler get_included_files()au bon moment, sinon un peu de tableau-popping est nécessaire!

Pour rompre cela:

Vous ne pouvez pas collecter tous les fichiers de modèle inclus sans trace PHP. Les superglobales à l' intérieur template_include ne les collecteront pas tous . L'autre façon consiste à "placer un marqueur" dans chaque fichier de modèle, mais si vous devez d'abord interagir avec les fichiers, vous aurez du temps et de l'idée.

1) Nous devons vérifier à l'intérieur de tous les fichiers qui ont été utilisés par la demande actuelle de Wordpress. Et ils sont nombreux! Ne soyez pas surpris si vous utilisez 300 fichiers avant même que votre functions.php soit enregistré.

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

Nous utilisons la méthode native get_included_files () de PHP, qui convertit les barres obliques inverses en barres obliques pour correspondre à la plupart des chemins de retour Wordpress.

2) Nous coupons ce tableau à partir duquel le template-loader.php est enregistré. Après cela, get_included_files () ne devrait avoir que des fichiers de modèle remplis.

/* 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) Raccourcissez les résultats. Nous n’avons pas besoin du chemin jusqu’à ce que le dossier de thème ou le dossier de plug-in, en tant que modèles utilisés, puisse être mélangé à partir de dossiers de plug-ins, de thèmes ou de thèmes enfants.

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

4) Enfin, convertissez un tableau en une belle liste HTML

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

Une dernière modification peut être nécessaire dans part3) -replacement , si vous ne voulez pas d' inclusions obligatoires par plugins. Ils peuvent appeler en class-filesretard et "intercepter" pendant le traitement de sortie du modèle.

Cependant, j’ai trouvé raisonnable de les laisser visibles, car l’idée est de suivre ce qui a été chargé , même si ce n’est pas un "modèle" qui restitue la sortie à cette étape.

Jonas Lundman
la source