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

47

Lorsque vous activez un thème wordpress, il est toujours fastidieux de savoir quel fichier utiliser pour changer des 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 dites-vous?

    
posée Average Joe 24.12.2011 - 21:32
la source

9 réponses

31

Accrochez-vous sur 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 point de filtrage dans obtenir le nom du courant. fichier de modèle , mais allez chercher une copie de ce code et jetez-la dans le fichier functions.php de votre thème. .

Ouvrez ensuite le thème header.php ou footer.php du thème (ou celui que vous préférez) et utilisez le logiciel suivant pour imprimer le modèle actuel.

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

Si vous souhaitez utiliser cette fonctionnalité sur un site de production tout en préservant les informations 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() ); 
?>

Maintenant, vous pouvez garder une trace de ce que les vues utilisent quel modèle, tout en gardant ces informations à l'écart de vos visiteurs.

    
réponse donnée t31os 26.12.2011 - 13:57
la source
34

Eh bien, si vous ne voulez que vérifier quel fichier modèle a été utilisé pour générer la page actuelle, vous n'avez pas besoin de vous salir les mains avec du code;)

Ce plugin très pratique appelé Barre de débogage est . beaucoup de situations y compris la votre. 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 ...

Pourquelabarrededébogagefonctionne,vousdevezactiverlesoptionswp_debugetwp_savequeries.Cesoptionssontdésactivéespardéfaut.

Avantd'apporterdesmodifications,vousdevezgarderàl'espritcertainspoints:

  • Nelefaitespasdansunenvironnementdeproduction,saufsilesiteWebnegénèrepasbeaucoupdetrafic.
  • Unefoisledébogageterminé,assurez-vousdedésactiverlesoptions(enparticulierl'optionwp_savequeriescarcelaaffectelesperformances)dusiteWeb.

Pourapporterlesmodifications:

  1. Ouvrezlefichierwp_config.phpviaunclientFTP.
  2. Recherchezl'optionwp_debug.Modifiez-leendefine('WP_DEBUG',true);.Silalignen'estpasprésente,ajoutez-laaufichier.
  3. Demême,modifiezouajoutezlalignedefine('SAVEQUERIES',true);aufichier.
  4. Enregistrer.Vousêtesprêtàdéboguer.

Plusd'infos: Codex

    
réponse donnée Michal Mau 26.12.2011 - 19:16
la source
14

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

    
réponse donnée mightypixel 23.01.2014 - 14:06
la source
13

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 > afficher la source, et le nom du modèle sera affiché sous forme de commentaire dans votre code HTML, par exemple,

.
<!-- page.php -->
    
réponse donnée ronald 27.12.2011 - 19:32
la source
4

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

Découvrez-le ici: enlace

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.

    
réponse donnée CookiesForDevo 25.12.2011 - 13:51
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 basique et plus spécifiquement conçue à cet effet: enlace

    
réponse donnée Julian K 29.01.2013 - 05:22
la source
3

Une chose très simple que je fais est d'insérer un commentaire HTML identifiant le fichier de modèle dans chaque fichier pertinent du thème, par exemple en haut du fichier 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 enlace sont ce que j'ai tendance à utiliser.

    
réponse donnée David R 24.12.2011 - 21:40
la source
3

Il existe un plugin nommé Vérification du thème qui fait exactement cela. Il affiche le nom du fichier de modèle actuel utilisé comme commentaire HTML.

    
réponse donnée navjotjsingh 26.12.2011 - 21:31
la source
3

Voilà:

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 , tout en une 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 pourriez avoir besoin de vérifier que votre serveur ne renvoie aucun slash double sur aucun chemin . N'oubliez pas de placer cette option après que tous les fichiers de modèle aient été utilisés, comme dans footer.php, mais que avant la barre d'administration s'affiche .

si admin-bar stuff chemin est affiché en haut, ou dans tout autre fichier, remplacez le nom de fichier template-loader.php 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 priorité (au plus tôt) 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);

priorité -5 assurez-vous que le chargement est effectué en premier. La clé est d’appeler get_included_files() au bon moment, sinon il est nécessaire d’afficher des tableaux!

Pour résoudre ce problème:

Vous ne pouvez pas collecter tous les fichiers de modèle inclus sans la trace PHP. Les superglobales à l'intérieur de template_include ne les collecteront pas tous . L’autre méthode consiste à "placer un marqueur" dans chaque fichier de modèle, mais si vous devez d’abord interagir avec les fichiers, vous perdrez 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 requête Wordpress en cours. 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 modèle-loader.php est enregistré. Ensuite, get_included_files () ne devrait contenir que des fichiers de modèle.

/* 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 d'accès tant que le dossier de thèmes ou le dossier de plug-ins, en tant que modèles , ne peuvent pas être mélangés depuis des plugins, des thèmes ou des dossiers 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 la partie 3) -remplacement , si vous ne souhaitez pas vouloir un inclut plugins. Ils peuvent appeler class-files tard et "intercepter" lors du traitement de la 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 affiche le rendu de cette étape.

    
réponse donnée Jonas Lundman 15.09.2017 - 08:14
la source

Lire d'autres questions sur les étiquettes