web-dev-qa-db-fra.com

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

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?

52
Average Joe

Accédez à template_include, définissez une valeur 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 filtrage dans Obtenir le nom du fichier de modèle actuel , mais aller chercher une copie de de ce code et le copier dans le fichier functions.php de votre thème.

Ensuite, ouvrez le header.php ou le footer.php du thème (ou ce que vous préférez) et utilisez l'une des méthodes suivantes pour imprimer le modèle actuel.

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

Si vous souhaitez utiliser ceci sur un site de production et garder ces informations à l’abri des 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.

34
t31os

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 existe un plugin pratique appelé Barre de débogage . 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 ...

enter image description here

Pour obtenir la barre de débogage working , vous devez activer les options wp_debug et wp_savequeries. Ces options sont désactivées par défaut.

Avant d'apporter des modifications, vous devez toutefois garder à l'esprit certains points:

  • 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é, assurez-vous de désactiver les options (en particulier l'option wp_savequeries car cela affecte les performances) du site.

Pour faire les changements:

  1. Ouvrez le fichier wp_config.php via un client FTP.
  2. Recherchez l'option wp_debug. Modifiez-le en 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. Sauvegarder. Vous êtes prêt à déboguer.

Plus d'infos: Codex

37
Michal Mau

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 cela pourra aider. :)

21
mightypixel

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

<!-- page.php -->
12
ronald

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 destinée à cet usage: http://wordpress.org/extend/plugins/what-the-file/

4
Julian K

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.

4
CookiesForDevo

Voici:

Une liste HTML avec tout fichiers de modèle utilisés pour la page d'arrivée actuelle, incluant toutes les parties de modèle des plugins, thème enfant et/ou combinaisons 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 besoin de vérifier que votre serveur ne renvoie pas de double barre oblique sur aucun chemin . N'oubliez pas de placer ceci après que tous les fichiers de modèle aient été utilisés, comme dans footer.php, mais que avant que la barre d'administration ne s'affiche .

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

priority -5 make shure il se charge 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 PHP backtrace. Les superglobales inside 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 perdez du temps et de toute 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 le PHP natif get_included_files (), convertissant 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 du thème ou le dossier du plugin, en tant que modèles en cours d'utilisation, puissent être mélangés à partir de dossiers de plugins, thèmes ou thèmes enfants.

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

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

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

Une dernière modification peut être nécessaire en partie3) -remplacement , si vous n'avez pas voulez requis inclut par plugins. Ils peuvent appeler class-files tard 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.

3
Jonas Lundman

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 graphique de référence http://codex.wordpress.org/Template_Hierarchy sont ce que j'ai tendance à utiliser.

3
David R

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

3
navjotjsingh