Je donnais un exemple parmi d'autres, mais de toute façon les fonctions the_machin() c'est pas mieux :
the_ID() c'est quoi ? Un wrapper qui affiche le contenu de la fonction get_the_ID() qui elle même est un accès à une variable globale $ID (un paliatif au fait que le moteur est une usine à gaz)... je sais pas ce que le mec qui a codé ça avait fumé mais c'est sans aucun doute très puissant. Deux fonctions pour wrapper une simple variable. Et à ce moment pourquoi l'API est pas un peu plus claire ? get_machin() => renvoi des données, print_machin() affiche des données, etc.
Exporter une variable $id vers le template pour faire un simple echo $id c'était probablement trop compliqué...
Je reviens quand même sur mon exemple précédent, si on fait abstraction du fait que ce bout de code n'a rien à faire dans le template, ce qui choc c'est le manque de cohérence :
global $page, $paged;
D'abord il faut déclarer des variables globales (j'en ai utilisé une fois, c'était en 1998, un jeudi... il pleuvait). pour y avoir accès dans le thème. Pourquoi les variables utilisables dans un template ne sont pas exportées vers la vue après l’exécution du code métier et avant l'affichage ?
wp_title( '|', true, 'right' );
Là c'est presque de la cryptographie pour comprendre ce que fait cette fonction sans se reporter à la doc (et c'est impossible à mémoriser). A noter que cette fonction affiche aussi le séparateur : WTF ?!?
bloginfo( 'name' );
Récupère une info sur le blog, ok pourquoi pas... et l'AFFICHE... hein ??! Là aussi un print_bloginfo() aurait été beaucoup plus clair ou un echo bloginfo() mais certainement pas un mélange des deux. Mais en fait c'est encore un wrapper avec echo d'une autre fonction qui arrive juste après... Au passage on a de manière de nommé les fonctions, plus de underscore pour séparer les mots.
$site_description = get_bloginfo( 'description', 'display' );
Bon ben là on affiche plus directement comme précédemment mais on les récupère et on applique un filtre dessus. Tiens justement le filtre pour l'affichage aurait du être dans la fonction d'affichage (bloginfo()), mais non il est dans la fonction parente (le développeur revenait juste de son voyage en Jamaïque). Au passage le underscore dans le nom de la fonction est de retour mais seulement pour le premier mot...
Et puis ça continue :
if ( $site_description && ( is_home() || is_front_page() ) )
echo " | $site_description";
Alors là c'est presque explicite mais tiens, pourquoi maintenant le séparateur est affiché par un echo plutôt que par une fonction comme précédemment ?
Et le meilleur pour la fin :
if ( $paged >= 2 || $page >= 2 )
echo ' | ' . sprintf( __( 'Page %s', 'twentyeleven' ), max( $paged, $page ) );
Bon ben là rien à dire, l'intégrateur se flingue direct.
Bon par contre j'avoue que la partie interface d'administration est relativement user friendly par rapport à pas mal de CMS (du moment qu'on le surcharge pas de plugins) et c'est sans aucun doute ce qui fait la popularité et la force de Wordpress. Mais côté développement c'est juste une ignominie.
Modifié par jb_gfx (04 Jun 2012 - 18:54)