Tous les billets parus dans / Développement

Modifier ses fils RSS dans WordPress

Un petit truc bien utile découvert aujourd’hui pour modifier les informations utilisées dans vos fils RSS de WordPress.

En fait, je n’ai jamais compris pourquoi on ne pouvait pas modifier le format des fils RSS avec une page d’un thème et que tout était bien ancré dans le coeur de WP ( dans /wp-includes/feed-rss2.php)… mais bon, j’ai constaté que c’était presque aussi simple de le faire avec un hook dans le fichier functions.php de votre thème préféré.

Pour ce faire, il suffit d’ajouter les fonctions de modification suivantes pour chacun des éléments à modifier :

1
2
3
4
5
6
7
8
function nouveau_titre_RSS() {
	$txt = get_the_title();
	return $txt . ' / estrade.ca';
}
function nouveau_texte_RSS() {
	$txt = get_the_excerpt();
	return $txt . '<br /><br />Plus de nouvelles sur <a href="http://estrade.ca/">estrade.ca</a>';
}

Ensuite, vous appelez ces filtres et les appliquez aux routines d’affichage du fil RSS :

1
2
add_filter('the_excerpt_rss', 'nouveau_texte_RSS');
add_filter('the_title_rss', 'nouveau_titre_RSS');

Dans cet exemple, on ne fait qu’ajouter un peu de texte aux éléments TITLE et DESCRIPTION d’un fil RSS… mais vous voyez un peu tout ce qui peut être possible de faire avec ça!


Créer plusieurs barres latérales (sidebar) dans WordPress

Voici un truc tout simple pour créer autant de barres latérales (sidebars) que vous le souhaitez, afin de les équiper de widgets et les afficher dans diverses sections.

Ça devient très utile quand, par exemple, on veut créer une sidebar différente pour une page d’accueil (index.php), une page d’accueil de catégorie (archive.php) et un article seul (single.php).

Tout d’abord, il faut initialiser les barres latérales. Dans le fichier functions.php ajoutez :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
if ( function_exists('register_sidebar') ) {
	register_sidebar(array(
		'name' => 'Droite - Accueil',
		'before_widget' => '<div id="%1$s" class="widgetContainer %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widgetTitle">',
		'after_title' => '</h3>'
	));
	register_sidebar(array(
		'name' => 'Droite - Billet',
		'before_widget' => '<div id="%1$s" class="widgetContainer %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widgetTitle">',
		'after_title' => '</h3>'
	));
	register_sidebar(array(
		'name' => 'Droite - Categorie',
		'before_widget' => '<div id="%1$s" class="widgetContainer %2$s">',
		'after_widget' => '</div>',
		'before_title' => '<h3 class="widgetTitle">',
		'after_title' => '</h3>'
	));
}

Vous verrez donc à ce moment les trois barres latérales apparaître dans le panneau d’administration, sous Apparence / Widgets.

Par la suite, il suffit d’inclure la bonne barre latérale dans le bon contexte. Pour ce faire, créez – si ce n’est pas déjà fait – un fichier sidebar.php contenant ceci :

1
2
3
4
5
6
7
8
9
10
11
12
if(is_home()) {
	//accueil
	if (function_exists('dynamic_sidebar')) dynamic_sidebar('Droite - Accueil');			

} elseif( is_category('nom-categorie') ) {
	//catégorie spécifique
	if (function_exists('dynamic_sidebar')) dynamic_sidebar('Droite - Categorie');

} elseif( is_single() ) {
	//dans un billet
	if (function_exists('dynamic_sidebar')) dynamic_sidebar('Droite - Billet');
}

Mise en cache pour WordPress : votre avis?

Je profite de cette tribune pour vous poser une question :

Avez-vous déjà trouvé (ou mieux, réalisé) des études de cas ou études comparatives traitant de mise en cache pour un blogue roulant sous WordPress?

Je viens d’installer WP Super Cache sur quelques sites à fort trafic, la réponse côté serveur semble très bonne, mais je ne sais pas si cette solution est la plus optimale possible. Il y a tant d’alternatives (à commencer par DB Cache qui m’intrigue, ou encore W3 Total Cache qui paraît toutefois un peu instable) que je peine à me brancher définitivement.

Aussi, ces plugins comportent nombre de configurations (mise en cache de toutes les pages, uniquement pour les visiteurs non-connectés, définition de zones dynamiques, etc.) et je voulais chercher à savoir si des configurations optimales existent pour maximiser le bien-être de la machine autant que du visiteur.

Alors?

Une idée? Un témoignage? Une référence?


Mise en cache de pages dynamiques

Voici un petit tutoriel pour expliquer comment – très simplement – mettre une page dynamique en cache pour en accélérer l’affichage et limiter les ressources côté serveur (apache et mysql).

Premièrement, suffit de créer deux fonctions. La première – debut_cache() – testera l’existence d’un fichier cache récent pour l’affichier, ou initialisera le buffer et débutera la mise en cache du contenu. La deuxième – fin_cache() – prend le contenu mis dans le buffer et va, suivant le besoin, écrire un fichier statique avec le contenu généré par le serveur qui sera alors repris par les requêtes suivants jusqu’à son expiration.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
function debut_cache() 
{
	global $cachedFile;
	if(CACHE > 0) {
		if (!isset($_POST) || count($_POST) == 0) {
			$hash = md5(serialize($_GET) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
			$filename = basename($_SERVER['PHP_SELF'] . '.' . $_SERVER['HTTP_HOST'] . '.' . $hash . '.html');
			if (file_exists(CACHE_DIR . $filename) AND (time() - filemtime(CACHE_DIR. $filename)) < CACHE) {
				readfile(CACHE_DIR . $filename);
				exit();
			} else {
				$cachedFile = CACHE_DIR . $filename;
				ob_start();
			}
		} else $cachedFile = false;
	}
}
   
function fin_cache() 
{
	global $cachedFile;
	if((CACHE > 0) AND $cachedFile) {	
		$hoststr= getenv("HOSTNAME");
		$host = explode (".", $hoststr);
		$page = ob_get_contents();
		$page .= '<!-- Page mise en cache @ ' . date('Y-m-d H:i:s') . ' -->';
		ob_end_flush();	
		if ($file = fopen($cachedFile, 'w')) {
    			fwrite($file, $page);
    			fclose($file);
    		}		
	}
}

Juste avant de faire l’appel, il importe de définir deux variables (des constantes globales dans cet exemple).

1
2
3
4
5
//temps pour le cache (secondes)... 0 pour annuler la cache
define('CACHE', 60*15);  //15 min

//dossier de cache
define('CACHE_DIR', '/www/cache/');

Ensuite, on se lance :

1
2
3
4
5
6
7
8
9
10
//lancer la mise en cache
debut_cache();
 
//---------------------------------------------
//afficher normalement votre page ici
//elle sera mise dans le buffer
//---------------------------------------------

//afficher le contenu (du buffer ou du fichier mis en cache)
fin_cache();

Raccourcir une URL avec l’API de Bit.ly en PHP

Voici une petite fonction qui m’a été bien utile pour raccourcir une URL en utilisant l’API de Bit.ly et la classe SimpleXML (disponible dans PHP 5).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function shorten($url, $bitly_login, $bitly_apiKey)
{
	//bit.ly defaults
	$bitly_version 	= '2.0.1';
	$bitly_history	= 1;
	
	//url à interroger pour le retour via XML
	$connectURL = 'http://api.bit.ly/shorten?version='.$bitly_version.'&longUrl='.$url.'&login='.$bitly_login.'&apiKey='.$bitly_apiKey.'&history='.$bitly_history.'&format=xml&callback=?';
	
	//lire le contenu retourné par l'URL
	$content = file_get_contents($connectURL);
	if ($content !== false) {
		//créer l'object avec SimpleXML (PHP 5)
		$bitly = new SimpleXMLElement($content);
		//s'assurer qu'il n'y a pas d'erreur
		if($bitly->errorCode == 0)
			return $bitly->results[0]->nodeKeyVal->shortUrl;
	} 
	return false;
}

Suffit donc de l’appeler de cette manière :

1
2
3
4
5
6
7
//vos infos bit.ly
$bitly_login = 'username';
$bitly_apiKey = 'R_1234567898765432123456789';
//appel de la fonction
$shorten = shorten('http://estrade.ca', $bitly_login, $bitly_apiKey);
//retourner l'url raccourcie
echo $shorten;

80 arrière-plans en mosaïque

Vraiment très inspirants tous ces patterns d’arrière-plan.

Et d’entre tous, celui-ci est certainement mon préféré :

12-free-high-resolution-fabric


Créer une page PHP personnalisée dans l’environnement de WordPress

Un petit truc d’apparence bien simple : comment créer une page PHP personnalisée permettant quand même d’accéder à toutes les variables et fonctions propres à l’environnement de notre blogue WordPress. La réponse?

Créer une page dans votre dossier de thème :

/wp-content/themes/nom-du-theme/page.php

Au tout début de cette page, insérez les instructions suivantes :

1
2
3
4
5
6
<?php
	define('WP_USE_THEMES', false); 
	//chemin relatif à la racine de votre blogue
	//on ne peut pas utiliser les variables de WP, donc on y va manuellement
	require('../../../wp-blog-header.php');
?>

Vous pourrez donc utiliser toutes les fonctions propres à WordPress (principalement le loop) dans votre page sur mesure.

Notez que pour des raisons esthétiques, ça pourrait être bien de songer à embellir l’URL d’accès à cette page grâce à MOD_REWRITE et votre fichier .htaccess.