La beta 1 de WordPress 3 sort aujourd’hui. Pas de révolution, mais de nombreuses évolutions utiles, ciblées sur l’administration et la gestion d’un site sous WordPress.
Fusion de WordPress et WordPress MU (Multi Utilisateurs) qui permettra de gérer plusieurs blogs avec la même installation.
Un nouveau thème, Twenty Ten (« Vingt dix »), qui est d’une banalité rare.
Un processus d’install encore plus simple, qui permet par exemple de choisir le mot de passe administrateur
Un sous menu « Mises à jour » dans le Tableau de Bord, qui met à jour WP et les plugins.
Plus de facilité pour modifier et gérer les thèmes
Un thème WordPress bien codé peut alléger la charge du serveur et augmenter la rapidité de chargement des pages. Par ailleurs, vous gagnerez en facilité de maintenance en rationalisant l’organisation de votre thème.
De facon générale, le minimum de PHP dans vos fichiers de theme. Le fichier functions.php (à placer dans le même répertoire que vos fichiers de thème single.php, index.php, etc.) est fait pour contenir les fonctions PHP qui serviront dans le thème. En particulier :
Pas d’interrogation RSS dans les thèmes
Pas de requêtes MySQL lourdes dans les thèmes
Le minimum de lignes PHP : si vous venez d’ajouter plus de 3 lignes de PHP à la suite dans votre thème, vous feriez mieux d’en faire une fonction.
Autant que possible, essayez de spécifiez les dimensions des images dans vos balises <img>. C’est systématique pour les images statiques (images de sidebar); en revanche pour les images dynamiques (dans les billets), c’est moins important.
Pensez à compresser/minifier vos fichiers CSS et JS. Utilisez un compresseur de Javascript pour créer des versions « pack » de vos fichiers Javascript. Utilisez votre éditeur favori pour formatez vos CSS « en ligne »
Utilisez des noms de classes courts dans vos fichiers CSS, surtout pour les classes répétitives. #h au lieu de #header n’économisera pas grand chose, mais .ost au lieu de .odd_strong_title peut avoir un impact (on gagne quelques % sur la longueur du fichier HTML)
<?php
function faire_quelque_chose($args = '') {
$defaults = array(
'var' => 'valeur par defaut',
'var2' => 'valeur par defaut',
'echo' => 1,
);
$args = wp_parse_args($args,$defaults);
extract($args,EXTR_SKIP);
// vous pouvez maintenant utiliser les variables $var et $var2
// $output = "resultat de la fonction: $var est var et var2 est $var2";
// ajouter un filtre avant de retourner est une bonne pratique, qui permet d'ajouter une couche plugin a vos fonctions de theme
$output = apply_filters('faire_quelque_chose',$output);
if($echo) echo $output;
else return $output;
}
Utiliser le cache WordPress
Rien de plus simple, et ca peut vous économiser beaucoup de charge :
Sans cache :
function afficher_quelque_chose() {
$output = "une opération longue et compliquée";
echo $output;
}
function faire_qqchose_post($post_id) {
$value = "operation compliquée avec des get_post et plein de choses compliquées";
return $value;
}
Avec cache :
function afficher_quelque_chose() {
if(!$output = wp_cache_get('afficher_quelque_chose')) {
$output = "une opération longue et compliquée";
wp_cache_add('afficher_quelque_chose',$output);
}
echo $output;
}
function faire_qqchose_post($post_id) {
if(!$value = wp_cache_get("faire_qqchose_$post_id")) {
$value = "operation compliquée avec des get_post et plein de choses compliquées";
wp_cache_add("faire_qqchose_$post_id",$value);
}
return $value;
}
Le cache ne sera effectif que si vous avez le plugin WP Super Cache activé en mode HalfOn ou On.
Garder un header.php léger : ajout dynamique du style et des scripts
Voici un exemple de début de fichier header.php, sur un site de mes clients, un site particulièrement chargé en trafic et très intégré :
Compliqué, n’est ce pas ? Il y a pourtant plus de 10 scripts JS et 5 feuilles de style sur ce site. Une fois tout installé, voici un exemple de header généré :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" class="fr-FR">
<head profile="http://gmpg.org/xfn/11">
<!-- les deux lignes suivantes sont ajoutés par PHP Speedy, il s'agit du JavaScript et du CSS compressé -->
<link type="text/css" href="http://lesite.com/wp-content/plugins/php_speedy_wp/cache/_cmp_cssstylesheet_aaaabe17ccfd921696e24d48176f17b6.php" rel="stylesheet" />
<script type="text/javascript" src="http://lesite.com/wp-content/plugins/php_speedy_wp/cache/_cmp_javascript_57b933498ac7eff7b75fe9dd997b5cb0.php"></script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>titre généré</title>
<!--wp_head-->
<!-- tout ce qui suit est rajouté de facon dynamique -->
<!-- rajoute par le theme -->
<link href="/favicon.ico" rel="shortcut icon" />
<script type="text/javascript">if(top!=self) {top.location=self.location;}</script>
<!--[if IE]><link rel="stylesheet" href="http://lesite.com/wp-content/themes/lesite/ie.css" type="text/css" media="screen, projection" /><![endif]-->
<!-- les lignes qui suivent sont rajoutés en standard par WordPress -->
<link rel="alternate" type="application/rss+xml" title="Jeux Géographiques RSS Feed" href="http://lesite.com/feed/" />
<link rel="alternate" type="application/atom+xml" title="Jeux Géographiques Atom Feed" href="http://lesite.com/feed/atom/" />
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="http://lesite.com/xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="http://lesite.com/wp-includes/wlwmanifest.xml" />
<meta name="generator" content="WordPress 2.7" />
<meta name="description" content="Description." />
<meta name="keywords" content="keywords" />
<!--//wp_head-->
</head>
Il n’y a aucune raison de charger plus que ca le fichier header.php.
En raison des limites des requêtes HTTP (principalement, 4 fichiers servis par sous domaine simultanément), vous gagnerez de la rapidité en servant vos fichiers CSS, JS et images à partir d’un sous domaine. Une solution simple est de configurer un sous domaine qui pointe à la même adresse que votre site principal. Exemple: www.malaiac.net et medias.malaiac.net pointent vers le même répertoire.
Vous pouvez ensuite modifier les adresses de certains de vos fichiers (par exemple, les images), ou bien filtrer tout les JS et CSS :
Dans functions.php :
// a modifier avec votre sous domaine ou CDN
//define('CDN_ADDRESS','http://medias.malaiac.net');
function get_cdn_address() {
if(!defined('CDN_ADDRESS')) return get_option('home');
return CDN_ADDRESS;
}
function add_cdn_address($bloginfo,$output = '', $show= '') {
if(!in_array($output,array('stylesheet_url','stylesheet_directory','template_directory','template_url'))) return $bloginfo;
$bloginfo = str_replace(get_option('home'),get_cdn_address(),$bloginfo);
return $bloginfo;
}
add_filter('bloginfo_url','add_cdn_address',10,2);
/** attention à modifier :
* get_bloginfo('template_directory');
* en :
* get_bloginfo('template_directory','display');
* pour que le filtre soit appellé
**/
/**
* Pour afficher une image dans votre thème, utilisez :
*
**/
Utilisez Ajax pour charger les éléments lourds
Certains éléments n’ont aucun intérêt pour le référencement, et prennent beaucoup de temps à charger. Exemple : les mosaiques de gravatars des derniers commentaires ; une image lourde qui sert d’illustration.
Vous pouvez charger ces éléments en Ajax, exemple :
Dans votre répertoire de thème, ajoutez un fichier ajax.php :
<?php
header("text/html; charset=UTF-8");
// si vous avez besoin de charger WordPress
//include('../../../wp-load.php');
if($_POST['action'] == 'contenulourd') {
echo "<div>plein de contenu avec des <img> bien chargées et des <p>contenus bien lourds</p>";
}
}
Une base de fichiers functions.php
// si vous avez un fichier de traduction, à nommer fr_FR.mo
load_theme_textdomain('theme');
function theme_init() {
// setlocale permet de préciser la langue et le charset à utiliser si besoin
// setlocale(LC_ALL, 'fr_FR@euro', 'fr_FR', 'fra_fra');
// ajout JS et CSS
$template_dir = get_bloginfo('template_directory','display');
wp_enqueue_style('style_css',$template_dir.'/style.css',array(),false,'screen,projection');
wp_enqueue_style('print_css',$template_dir.'/print.css',array(),false,'print');
// ce script se chargera en pied de page
wp_enqueue_script('theme_js_footer',$template_dir.'/functions.js',array('jquery'),false,1);
// ajout d'un script avec des chaines de traduction :
wp_enqueue_script('theme_js',$template_dir.'/functions.js',array('jquery'));
wp_localize_script('theme_js','themeL10n',array(
'no' => __('No','theme'),
'thanks' => __('Thanks','theme'),
));
// ces chaines seront disponibles dans le javascript avec : themeL10n.thanks
}
// pour WP2.8+
add_action('wp_enqueue_scripts', 'theme_init');
// pour WP < 2.8, dans ce cas, rajouter if(is_admin()) return; au début de la fonction
add_action('init','theme_init',8); //
// cette fonction se lance entre <head> et </head>
function theme_wp_head() {
if(is_admin()) return;
// exemple de ligne
echo '
';
}
add_action('wp_head','theme_wp_head',8);
// cette fonction peut servir à filter les headers 301 et 404 (redirections, héritages, etc.)
function theme_header($header) {
if($header == 'HTTP/1.1 301 Moved Permanently') {
// faire qqchose
}
elseif($header == 'HTTP/1.1 404 Not Found') {
// faire qqchose
}
return $header;
}
add_filter('status_header','theme_header');
Un nouveau plugin WordPress, WordPress.com Stats Reports, qui utilise le plugin WordPress.com Stats pour afficher le nombre de lectures d’un billet et vos billets les plus lus.
Si vous utilisez le plugin de statistiques WordPress.com Stats, vous avez des statistiques disponibles dans votre tableau de bord.
zeList est disponible depuis quelques semaines en version 0.8+, stable. Ce plugin WordPress permet de créer et gérer un annuaire sur une base WordPress.
Il n’y plus – beaucoup – de bugs, un plugin d’import est disponible pour migrer de FreeGlobes, et l’administration est particulièrement rapide : c’était un de mes besoins au départ, qui m’a fait m’éloigner de FreeGlobes
WordPress 2.7 vient de sortir en beta 1, apres plusieurs journées de débuggage intensif. Les principaux changements portent sur l’interface d’administration, nom de code « CrazyHorse », qui a fait beaucoup parler d’elle… Un peu trop de javascript au gout de certains, en particulier, et plusieurs changements radicaux sur l’organisation des page.
zeList, plugin d’annuaire pour WordPress, profite de cette release : le script est disponible en version alpha pour WordPress 2.7. La version 0.6 beta sera disponible à la sortie finale de WordPress 2.7.
Les indécis et les inquiets sont plutot rassurés par les derniers changements, qui ont débouché sur une interface propre et élégante ; on est un peu dépaysé au départ, mais quelques jours d’utilisation suffisent à convaincre. C’est beaucoup plus rapide, très propre, très efficace.
Nouvelle interface d'administration : la page d'accueil remonte beaucoup plus d'informations lisibles et utiles.
Nouvelle page d'édition, très "widgetisée". Tous les blocs sont masquables et déplaceables.
Les plugins passent plutot bien, malgré beaucoup de changements dans le code WordPress.
L’interface de médias, est convaincante ; elle n’est pas finalisée dans la beta 1.
Quelques bugs trainent encore, qui feront attendre les plus prudents pour une version stable.
Les choix d’ergonomie se défendent bien, les boutons d’actions sont mieux identifiés, le bloc de publication est compact et relativement clair.
La date du 10 novembre, originellement prévue comme release de la version finale, est repoussée. Une version candidate (RC) sera releasée le 10, mais la version finale 2.7 est prévue pour la fin du mois selon la stabilité.
Sur WordPress, les Billets sont rédigés dans un flux chronologique.
Les Pages, en revanche, sont considérés comme « hors » du flux chronologique (les Pages « à propos », « contactez nous », etc.)
Selon ce principe, on ne peut pas modifier la date ou « l’horodate » des Pages.
Mais une Page hors du flux chronologique ne signifie pas toujours un document non « daté ». On a parfois besoin de montrer aux visiteurs la date de création ou de mise à jour de la Page.
Pour cet usage, voici un mini-plugin pour ajouter à la page d’édition des Pages un bloc timestamp.
La bonne nouvelle de la semaine : Yahoo Pipes vient d’ouvrir son service aux flux externes. En pratique ? Ca veut dire qu’on peut faire rentrer tout le contenu XML / RSS du Web dans l’usine Pipes
Intégration vidéo / images / etc sur WordPress avec les « boites à lumière » LightBox de John Noone (groupe d’image, redimensionnement automatique, slideshow) LightBox JS v2.0 de Lokesh Dhakar (gestion d’image seule ou par set, groupe d’image liées, effets de transition) VideoBox de Gobekdeligi (intégration video avec boite à lumière,
Un script de gestion de la connaissance pour les professionnels, ActiveKB (FAQ, gestion des permissions, sauvegarde, statistiques, recherche, etc.)
Et un essai de nouvelles palettes de couleurs publicitaires… n’hésitez pas à commenter !
Si vous consultez ce blog sur un agrégateur RSS, vous avez remarqué que les billets se noient au milieu des ‘billets automatiques’ créés par delicious chaque jour.
Pas très pratique pour les lecteurs par RSS : et ils sont nombreux, environ 30 % des lectures sur Malaiac Attack se font par un agrégateur. En tête : Bloglines, suivi RssXpress et Google News. Bizarrement, Netvibes ne représente qu’une faible part.
Par ailleurs, je cherchais un nouveau template qui corresponde mieux à mon rythme de publication : quelques billets par semaine (ou moins…), un peu plus longs que la moyenne sur un blog. À l’opposé de ces billets longs, je me retiens parfois de faire un billet pour deux ou trois lignes de texte. Le blog a maintenant une catégorie « Asides », que je préfère appeller ex-folio, pour ces billets courts.
Les cinq-sept derniers tags del.icio.us sont affichés en bas de page, je réfléchis à une alternative.