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.