Avant d’aller un peu plus loin avec Thematic il me semble important de regarder de plus près la structure du framework. L’objectif est de pouvoir retrouver facilement le code, les fonctions et le CSS afin de voir les possibilités d’adaptation au travers d’un thème enfant.
Pour vous faire une idée précise des possibilités offertes par l’utilisation d’un thème enfant à partir de Thematic je ne peux que vous conseiller de lire la série d’articles de Ian Stewart How To Modify WordPress Theme the Smart Way. Vous y apprendrez les bases pour :
Lisez ces 4 articles et tout va devenir limpide et vous convaincre définitivement des avantages de l’utilisation d’un framework WordPress (avantages que j’ai déjà passés en revue il y a quelques jours). En plus cela ne paraît pas si compliqué – même pour un débutant comme moi.
Cependant pour maîtriser ces modifications il est indispensable de connaître l’architecture de Thematic pour savoir l’adapter à son propre besoin :
Architecture des fichiers pour s’y retrouver dans le code et l’enchaînement des fonctions ce qui est indispensable pour savoir où chercher l’information.
Architecture des div et classes pour mettre en place les styles CSS.
Liste et emplacement des hooks pour savoir comment personnaliser le comportement du thème.
Les fichiers du thème
La structure des dossiers du thème est plutôt simple et tout est à sa place :
Dans la racine du thème Thematic, vous retrouverez l’ensemble des fichiers Template habituels : index.php, header.php, page.php, comments.php, etc. Evidemment dans notre utilisation, nous n’apporterons jamais de modification directement dans ces fichiers.
Le sous-dossier library contient le cœur du framework. Vous y retrouverez les dossiers :
extensions : contient toutes les fonctions appelées par les fichiers Template. Ce sont ces fichiers PHP qui contiennent le code détaillé du thème offrant les possibilités de personnalisation via les hooks. On trouve également dans ce dossier l’écran de configuration de Thematic dans le module d’administration (theme-options.php).
grids : fichiers GIF correspondant aux grilles de positionnement utilisable pour dessiner la maquette du site (sous Photoshop par exemple). Ces grilles sont celles du système Blueprint.
layout : feuilles CSS correspondant à des mises en page standard en 1, 3 ou 3 colonnes.
styles : feuilles de style par défaut. Il s’agit d’une base utilisable pour toute mise en page. A vous de voir si elles peuvent vous être utiles pour votre thème enfant ou si vous souhaitez repartir de zéro. Là encore, pas de modification dans ces fichiers : ils doivent juste être appelés via votre thème enfant.
languages : fichiers de traduction du thème.
scripts : scripts .js appelés par Thematic.
le sous-dossier thematicsamplechildtheme est comme son nom l’indique un modèle pour créer un thème enfant. Copiez ce dossier dans un sous-dossier correspondant à votre thème enfant (dans wp-content/themes) pour avoir une base pour créer votre thème enfant.
L’architecture du code
Le plus simple est de partir d’un exemple : atteindre le code qui génère les informations méta de l’article (auteur+date). Il s’agit ensuite de voir s’il est possible de le modifier via un hook de filtre.
Le fichier index.php à la racine du thème est celui qui génère les articles comme dans tout thème WordPress :
Comme vous le voyez, son contenu est plutôt condensé. On n’y retrouve pas la classique loop WordPress habituelle. A la place nous avons un appel de la fonction thematic_indexloop().
Le réflexe est donc d’aller voir le contenu de function.php pour en avoir le détail. Là encore, le code est plutôt sommaire. En réalité le fichier function.php de Thematic ne fait que mettre en place un certain nombre de variables et appeler les fonctions contenues dans le dossier library/extensions.
Effectivement, dans le dossier library/extensions, on retrouve un fichier nommé content-extensions.php. Dans ce fichier, à la ligne 46, on retrouve effectivement la déclaration de notre fonction thematic_indexloop() :
46
47
48
49
50
// Located in index.php// The Loopfunction thematic_indexloop(){
do_action('thematic_indexloop');}// end thematic_indexloop
Cette fonction renvoit vers l’action ‘thematic_indexloop’ elle-même définie dans la fonction thematic_index_loop() plus bas à la ligne 256 – notez la subtile différence entre la fonction et l'action correspondante avec le _ entre index et loop. Vous retrouvez ici la loop WordPress classique.
// The Index Loopfunction thematic_index_loop(){/* Count the number of posts so we can insert a widgetized area */$count=1;while( have_posts()): the_post()?><div id="post-<?php the_ID() ?>"class="<?php thematic_post_class() ?>"><?php thematic_postheader();?><div class="entry-content"><?php thematic_content();?><?php wp_link_pages('before=<div class="page-link">'.__('Pages:','thematic').'&after=</div>')?></div><?php thematic_postfooter();?></div><!--.post --><?php comments_template();if($count==$thm_insert_position){
get_sidebar('index-insert');}$count=$count+1;endwhile;}
add_action('thematic_indexloop','thematic_index_loop');
Toujours pas de trace de notre date+auteur de l’article cependant, on peut suspecter que la fonction thematic_postheader() appelée à la ligne 262 est celle qui va générer ces données. Voici son contenu, un peu plus loin dans le fichier content-extension.php :
// Information in Post Headerfunction thematic_postheader(){global$id,$post,$authordata;// Create $posteditlink $posteditlink.='<a href="'. get_bloginfo('wpurl').'/wp-admin/post.php?action=edit&post='.$id;$posteditlink.='" title="'. __('Edit post','thematic').'">';$posteditlink.= __('Edit','thematic').'</a>';$posteditlink= apply_filters('thematic_postheader_posteditlink',$posteditlink);if(is_single()|| is_page()){$posttitle='<h1 class="entry-title">'. get_the_title()."</h1>\n";}elseif(is_404()){$posttitle='<h1 class="entry-title">'. __('Not Found','thematic')."</h1>\n";}else{$posttitle='<h2 class="entry-title"><a href="';$posttitle.= get_permalink();$posttitle.='" title="';$posttitle.= __('Permalink to ','thematic'). the_title_attribute('echo=0');$posttitle.='" rel="bookmark">';$posttitle.= get_the_title();$posttitle.="</a></h2>\n";}$posttitle= apply_filters('thematic_postheader_posttitle',$posttitle);$postmeta='<div class="entry-meta">';$postmeta.='<span class="meta-prep meta-prep-author">'. __('By ','thematic').'</span>';$postmeta.='<span class="author vcard">'.'<a class="url fn n" href="';$postmeta.= get_author_link(false,$authordata->ID,$authordata->user_nicename);$postmeta.='" title="'. __('View all posts by ','thematic'). get_the_author().'">';$postmeta.= get_the_author();$postmeta.='</a></span><span class="meta-sep meta-sep-entry-date"> | </span>';$postmeta.='<span class="meta-prep meta-prep-entry-date">'. __('Published: ','thematic').'</span>';$postmeta.='<span class="entry-date"><abbr class="published" title="';$postmeta.= get_the_time(thematic_time_title()).'">';$postmeta.= get_the_time(thematic_time_display());$postmeta.='</abbr></span>';// Display edit linkif(current_user_can('edit_posts')){$postmeta.=' <span class="meta-sep meta-sep-edit">|</span> '.'<span class="edit">'.$posteditlink.'</span>';}$postmeta.="</div><!-- .entry-meta -->\n";$postmeta= apply_filters('thematic_postheader_postmeta',$postmeta);if($post->post_type=='page'|| is_404()){$postheader=$posttitle;}else{$postheader=$posttitle.$postmeta;}echo apply_filters('thematic_postheader',$postheader);// Filter to override default post header}// end thematic_postheader
A la ligne 380 commence le code générant les informations auteur+date dans la variable $postmeta. La ligne 397 est la ligne qui nous intéresse vraiment :
En effet elle définit un hook de filtre appelé ‘thematic_postheader_postmeta’ correspondant au contenu de $postmeta qui contient donc le texte généré pour l’affichage de l’auteur et de l’article.
Vous allez pouvoir remplacer ce texte par celui de votre choix grâce à votre thème enfant selon la technique décrite dans l’article de Themeshaper Using Filter Hooks in WordPress Child Theme. Cette technique consiste à créer une fonction personnalisée dans le fichier function.php du thème enfant et de remplacer le filtre ‘thematic_postheader_postmeta’ par votre propre code grâce à l’utilisation de l’instruction add_filter().
La structure des éléments
Fouiller dans les fichiers pour comprendre le fonctionnement peut être utile pour atteindre un élément précis mais avoir une vision globale de l’architecture des éléments du code est indispensable.
Vous y retrouverez les différents éléments d’une page : les div avec leur classe et ID, les appels des fonctions (via les actions), ainsi que la liste des fameux hooks.
Du très beau travail qui va faciliter grandement les choses.
Structure du Framework Thematic
Pour vous faire une idée précise des possibilités offertes par l’utilisation d’un thème enfant à partir de Thematic je ne peux que vous conseiller de lire la série d’articles de Ian Stewart How To Modify WordPress Theme the Smart Way. Vous y apprendrez les bases pour :
Lisez ces 4 articles et tout va devenir limpide et vous convaincre définitivement des avantages de l’utilisation d’un framework WordPress (avantages que j’ai déjà passés en revue il y a quelques jours). En plus cela ne paraît pas si compliqué – même pour un débutant comme moi.
Cependant pour maîtriser ces modifications il est indispensable de connaître l’architecture de Thematic pour savoir l’adapter à son propre besoin :
Les fichiers du thème
La structure des dossiers du thème est plutôt simple et tout est à sa place :
index.php, header.php, page.php, comments.php,etc. Evidemment dans notre utilisation, nous n’apporterons jamais de modification directement dans ces fichiers.librarycontient le cœur du framework. Vous y retrouverez les dossiers :extensions: contient toutes les fonctions appelées par les fichiers Template. Ce sont ces fichiers PHP qui contiennent le code détaillé du thème offrant les possibilités de personnalisation via les hooks. On trouve également dans ce dossier l’écran de configuration de Thematic dans le module d’administration (theme-options.php).grids: fichiers GIF correspondant aux grilles de positionnement utilisable pour dessiner la maquette du site (sous Photoshop par exemple). Ces grilles sont celles du système Blueprint.layout: feuilles CSS correspondant à des mises en page standard en 1, 3 ou 3 colonnes.styles: feuilles de style par défaut. Il s’agit d’une base utilisable pour toute mise en page. A vous de voir si elles peuvent vous être utiles pour votre thème enfant ou si vous souhaitez repartir de zéro. Là encore, pas de modification dans ces fichiers : ils doivent juste être appelés via votre thème enfant.languages: fichiers de traduction du thème.scripts: scripts .js appelés par Thematic.thematicsamplechildthemeest comme son nom l’indique un modèle pour créer un thème enfant. Copiez ce dossier dans un sous-dossier correspondant à votre thème enfant (danswp-content/themes) pour avoir une base pour créer votre thème enfant.L’architecture du code
Le plus simple est de partir d’un exemple : atteindre le code qui génère les informations méta de l’article (auteur+date). Il s’agit ensuite de voir s’il est possible de le modifier via un hook de filtre.
Le fichier
index.phpà la racine du thème est celui qui génère les articles comme dans tout thème WordPress :Comme vous le voyez, son contenu est plutôt condensé. On n’y retrouve pas la classique loop WordPress habituelle. A la place nous avons un appel de la fonction
thematic_indexloop().Le réflexe est donc d’aller voir le contenu de
function.phppour en avoir le détail. Là encore, le code est plutôt sommaire. En réalité le fichierfunction.phpde Thematic ne fait que mettre en place un certain nombre de variables et appeler les fonctions contenues dans le dossierlibrary/extensions.Effectivement, dans le dossier
library/extensions, on retrouve un fichier nommécontent-extensions.php. Dans ce fichier, à la ligne 46, on retrouve effectivement la déclaration de notre fonction thematic_indexloop() :Cette fonction renvoit vers l’action
‘thematic_indexloop’elle-même définie dans la fonctionthematic_index_loop()plus bas à la ligne 256 – notez la subtile différence entre la fonction et l'action correspondante avec le_entreindexetloop. Vous retrouvez ici la loop WordPress classique.Toujours pas de trace de notre date+auteur de l’article cependant, on peut suspecter que la fonction
thematic_postheader()appelée à la ligne 262 est celle qui va générer ces données. Voici son contenu, un peu plus loin dans le fichiercontent-extension.php:A la ligne 380 commence le code générant les informations auteur+date dans la variable
$postmeta. La ligne 397 est la ligne qui nous intéresse vraiment :En effet elle définit un hook de filtre appelé
‘thematic_postheader_postmeta’correspondant au contenu de$postmetaqui contient donc le texte généré pour l’affichage de l’auteur et de l’article.Vous allez pouvoir remplacer ce texte par celui de votre choix grâce à votre thème enfant selon la technique décrite dans l’article de Themeshaper Using Filter Hooks in WordPress Child Theme. Cette technique consiste à créer une fonction personnalisée dans le fichier
function.phpdu thème enfant et de remplacer le filtre‘thematic_postheader_postmeta’par votre propre code grâce à l’utilisation de l’instructionadd_filter().La structure des éléments
Fouiller dans les fichiers pour comprendre le fonctionnement peut être utile pour atteindre un élément précis mais avoir une vision globale de l’architecture des éléments du code est indispensable.
Dwenaus, un des membres du forum d’aide de Thematic a eu la bonne idée de réaliser un diagramme de la structure Thematic.
Vous y retrouverez les différents éléments d’une page : les div avec leur classe et ID, les appels des fonctions (via les actions), ainsi que la liste des fameux hooks.
Du très beau travail qui va faciliter grandement les choses.