La version de WordPress 3.3 est sortie (Sonny) elle comporte des améliorations d’ergonomie, notamment l’upload de média est facilité. Et la navigation dans le tableau de bord est également plus rapide.
Les API dans WordPress sont nombreuses et permettent de modifier ou personnaliser les contenus du site. On peut avoir besoin par exemple d’intervenir sur la base de données pour modifier une requête ponctuellement, dans ce cas on utilisera l’API des Hook, propre à WordPress. L’avantage d’un tel principe est que l’on ne touche pas au noyau du CMS. Ainsi dans le flux des actions qui affichent les contenus, on est intervenu proprement. Si ça se passe mal, un bug par exemple, on peut facilement retirer le code responsable du problème. On peut dire qu’une API permet d’étendre les possibilités du CMS, et personnaliser les contenus en fonction des contraintes d’un projet.
Donnons un exemple, supposons que l’on veuille afficher tous les articles planifiés à une date postérieure, il suffit de faire le Hook suivant, avant d’utiliser la boucle de WordPress qui affiche les articles :
function filter_where($where = '') { $where .= " AND post_date >= DATE( NOW() )"; return $where; } add_filter('posts_where', 'filter_where');
Les API s’utilisent un peu partout dans nos codes. Pour donner un exemple qui n’appartient pas à WordPress, on peut citer l’API de Google Maps, qui permet au développeur d’intégrer des cartes google personnalisées.Il faudra clairement suivre les actions nécessaires au bon fonctionnement du code de l’API et utiliser un ensemble de fonctions de l’API, selon certaines conventions.
Par exemple, ci-dessous une partie d’un shortcode pour WordPress qui utilise l’API de google Maps :
function geolocalisation_script($name,$lng,$lat,$content){ //préparation de la requete global $wpdb; $sql = "SELECT * FROM ".$wpdb->prefix."geolocalisation"; $points = $wpdb->get_results( $sql ); //si on ajoute un point supplémentaire $point_supp =''; if( $name!='' && $lng!='' && $lat!='' && $content ){ $point_supp = "var supp_points = ['".$name."',".$lng.",".$lat." ];"; $content_string = "var contentString = '<div id=\"content\">".$content."</div>';"; } $max = sizeof($points); $count = 0; foreach( $points as $point ) { $sep = ($count==($max-1))? '' : ','; $beaches .= "['".$point->name."',".$point->lng.",".$point->lat." ]".$sep; $count++; } /*API de google maps*/ $script_js = '<script type="text/javascript"> var beaches = ['.$beaches .']; var myLatlng = new google.maps.LatLng(-33.9, 151.2); function initialize() { var myOptions = { zoom: 7, center: myLatlng, mapTypeId: google.maps.MapTypeId.ROADMAP } var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); for(var i=0; i<beaches.length; i++) { var beach = beaches[i]; var myLatLng = new google.maps.LatLng(beach[1], beach[2]); var marker = new google.maps.Marker({ position: myLatLng, map: map, title:beach[0] }); }'; //Il faut peut être rajouter le point supplémentaire if($point_supp!=''){ $script_js .= $point_supp ; $script_js .= $content_string; $script_js .='var myLatLngSup = new google.maps.LatLng(supp_points[1], supp_points[2]);'; $script_js .='var infowindow = new google.maps.InfoWindow({ content: contentString });'; $script_js .= 'var marker2 = new google.maps.Marker({ position: myLatLngSup, map: map, title:supp_points[0] }); '; $script_js .= "google.maps.event.addListener(marker2, 'click', function() { infowindow.open(map,marker2); });"; } $script_js .='} </script>'; echo $script_js; }
Un CMS en général ne propose que la gestion de contenu du type catégories, articles, avec quelques options liées à la gestion de ces contenus. On est souvent dans la nécessité d’étendre les fonctionnalités de base d’un CMS pour répondre à des besoins spécifiques lors d’un projet de développement de site pour un client. Dans WordPress, on utilise les plugins, qui se branchent sur le CMS et qui permettent d’étendre ses fonctionnalités. Lors du développement d’un plugin on suivra les différentes conventions des API de WordPress dans l’écriture de son code. Le but étant d’intégrer proprement son extension dans le noyau de l’application, sans toucher au cœur de l’application.
Il permet la personnalisation des pages pour les articles, les catégories etc. Un template permet, également, d’organiser son code PHP au sein du code html de manière simplifiée. WordPress utilise sa propre hiérarchie de template, ainsi on peut avoir un template pour ses catégories ou une catégorie, un autre pour ses articles, etc. L’idée est de permettre au développeur de template d’organiser la présentation du contenu, tant au niveau du code PHP qu’au niveau du HTML/CSS. Les nombreux templates dans WordPress permettent une personnalisation très fine de chacun des contenus. Au départ dans un thème WordPress on peut n’avoir qu’un seul template index.php, mais bien souvent on a de nombreux templates car, les contenus d’un sites sont souvent assez différents dans leurs présentations.
Les extensions possibles dans WordPress sont : les plugins (les widgets en font parties), les templates et les fichiers de langues. Ces derniers permettant une internationalisation des extensions elles-mêmes.
Il existe d’autres CMS comme WordPress, on a, par exemple, Joomla! et Drupal. Drupal est plus technique, mais WordPress et Drupal partagent des concepts d’organisation, comme par exemple la taxonomie, les custom post type, etc. Chacun de ces CMS possède leurs propres API. Il faut faire cependant la distinction entre CMS et framework ainsi un framework est un ensemble d’outils, de composants permettant l’élaboration de logiciels du type CMS, par exemple. Un framework permet donc d’élaborer des applications sur mesure à partir de canevas, ou modèle de conception comme le MVC (design pattern). Ils ont des particularités techniques très évoluées et sont souvent très soucieux des aspects de sécurité. On les utilises en général pour des projets conséquents et techniques.
Shortcode pour Youtube :
La syntaxe dans l’article est:[youtube id=ddPTXNRFAlQ ], id correspond à l’id de la vidéo à afficher.
Le lien de la vidéo se trouve ici (en gras): exemple http://www.youtube.com/watch?v=ddPTXNRFAlQ&feature=feedrec_grec_index
function shortcode_youtube( $atts, $content= null ) { extract( shortcode_atts( array( 'id' => '', 'height' => 350, 'width' => 640, ), $atts ) ); $out = '<div id="youtube"><object width="'.$width.'" height="'.$height.'"> <param name="movie" value="http://www.youtube.com/v/'.$id.'?version=3&hl=fr_FR&rel=0"></param> <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param> <embed src="http://www.youtube.com/v/'.$id.'?version=3&hl=fr_FR&rel=0" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed> </object></div>'; return $out; } add_shortcode( 'youtube', 'shortcode_youtube' );
Shortcode pour Vimeo :
La syntaxe dans l’article est: [vimeo id=lien_de_la_video]
Le lien de la vidéo se trouve ici (en gras): exemple http://vimeo.com/32905466
function shortcode_vimeo( $atts, $content= null ) { extract( shortcode_atts( array( 'id' => '', 'height' => 350, 'width' => 640, ), $atts ) ); $out = '<div id="vimeo"> <iframe src="http://player.vimeo.com/video/'.$id.'?byline=0&portrait=0&color=FFCC33" width="'.$width.'" height="'.$height.'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen> </iframe> </div>'; return $out; } add_shortcode( 'vimeo', 'shortcode_vimeo' );
Shortcode pour Megavidéo :
La syntaxe dans l’article est: [megavideo id=lien_de_la_video]
Le lien de la vidéo se trouve ici (en gras): exemple http://www.megavideo.com/?v=NN496401
function shortcode_megavideo( $atts, $content= null ) { extract( shortcode_atts( array( 'id' => '', 'height' => 350, 'width' => 640, ), $atts ) ); $out = '<div id="megavideo"> <object width="'.$width.'" height="'.$height.'"> <param name="movie" value="http://www.megavideo.com/v/'.$id.'"></param> <param name="allowFullScreen" value="true"></param> <embed src="http://www.megavideo.com/v/'.$id.'" type="application/x-shockwave-flash" allowfullscreen="true" width="'.$width.'" height="'.$height.'"></embed> </object> </div>'; return $out; } add_shortcode( 'megavideo', 'shortcode_megavideo' );
WordPress est développé en PHP/MySQL. Il s’est développé, en 2001, à partir de b2 (projet de michel_v Valdrighi ) un blog en open source. En effet, ce dernier est abandonné côté code par son auteur, et est repris par d’autres développeurs, on appelle ce fait un fork, dans le monde du logiciel libre (fourche en anglais). Il évolue, alors, vers le CMS WordPress; c’est un processus tout à fait légal, car le projet est sous la licence GPL ( general public license) et permet donc l’étude, la contribution et le développement d’un code source.
L’un des principaux développeurs à ce jour de WordPress est : Matthew Mullenweg. Le développeur de b2, pour sa part, est revenu maintenant vers son projet initial et participe au développement.
WordPress est ultra configurable et personnalisable. En effet, on dispose d’une hiérarchie de template qui permet de personnaliser tous les contenus du site public. De plus, dans chacun des templates à l’aide de la boucle de WordPress (the loop) et des marqueurs de modèle de WordPress on peut mettre facilement les titres, le noms des auteurs de l’article, les images et le contenu des articles dans le code HTML, voir ci-dessous un exemple des marqueurs :
<h2><?php the_title(); ?></h2> <div class="post"> <?php the_content(); ?> <span class="author" ><?php the_author();?></span> ...
Les marqueurs de modèles sont donc des fonctions PHP que l’on peut utiliser dans les templates ou plugins pour afficher les contenus du site. Ci-dessous, on affiche le titre du site :
<h1><php? bloginfo('name'); ?></h1>
A partir de la version 1.2 (Mingus) de WordPress, le CMS WordPress est plus largement utilisé par la communauté des blogueurs. En effet, beaucoup de blogueurs quittent Movable Type, moteur de blog qui devient en 2003 payant pour une utilisation professionnelle du moteur.
Les versions de WordPress portent le nom de musiciens de Jazz.
Nous sommes maintenant à la version 3 de WordPress depuis juin 2010. Elle comporte un certain nombre d’évolutions, remarquables comme la taxonomie,les Custom post type, API de shortcode, la possibilité de gérer des multi-blogs, etc.
Le CMS WordPress est distribué sous la licence GNU/GPL, c’est donc un logiciel libre.
En effet, l’open source permet de développer, étendre et partager des techniques. Il est également un modèle économique très dynamique où la place du contributeur est très importante dans sa reconnaissance de programmeur créatif. De plus, cette licence permet un développement rapide du logiciel. Ainsi, de grandes communautés s’investissent librement sur la toile pour faire vivre et évoluer des CMS comme WordPress.