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 :

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 :

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!

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 :

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 :

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');
}

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?

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 :

<?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.

Il est extrêmement simple de créer un shortcode dans WordPress. Ces derniers se reconnaissent à leur structure rappelant le BBcode des forums de discussion : [valeur] et sont tout simplement remplacés par leur équivalent en code XHTML de sortie.

Pour créer votre shortcode, créez simplement une nouvelle fonction dans la page functions.php de votre thème :

function reafficheTitre()
{
    global $post,$posts;
    //contenu
    $html = '<h3><a href="' . the_permalink() . '">' . $post->post_title .'</a></h3>';
    //output
    return $html;
}
add_shortcode('titre', 'reafficheTitre');

Ceci insèrera un lien vers l’article (via the_permalink()) à l’endroit où vous aurez ajouté le shortcode [titre] dans votre texte.

Utiliser les shortcodes à l’extérieur du loop

Ceci peut devenir vraiment utile et puissant d’utiliser les shortcodes à l’extérieur du loop (dans vos thèmes ou encore dans vos widgets, par exemple). Pour ce faire, il suffit de parser votre contenu comme s’il était traité dans le loop :

$contenu = apply_filters('the_content', '[titre]');
echo $contenu ;

Ceci va donc utiliser le filtre qui traite habituellement le texte dans le loop de WordPress et l’appliquer à ce que vous avez passé en paramètre.

Mais on s’entend que le plus simple, dans ce cas précis, serait de faire un simple appel à votre fonction :

echo reafficheTitre();

Pour plus d’informations je vous invite à consulter cet excellent article.

Voici un script utile, un peu à l’image de celui permettant d’aller chercher la dernière image associée à un billet. Ce dernier permet, via une expression régulière (regex) d’extraire l’URL de la première image INSÉRÉE dans un article de blogue (et non attachée comme pièce-jointe).

Il suffit de l’intégrer au fichier functions.php de votre thème :

function getFirstImage() {

global $post, $posts;
$first_img = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i', $post->post_content, $matches);
$first_img = $matches [1] [0];

if(empty($first_img)) return;

return $first_img;
}

Pour appeler la fonction, il suffit d’intégrer ceci dans le loop :

$img = getFirstImage();

Voici une fonction qui permet de retourner un tableau associatif (hashtable) correspondant aux données relatives à la dernière image ayant été attachée à un billet.

Il suffit de l’intégrer au fichier functions.php :

function derniere_image() {
	$files = get_children('post_parent='.get_the_ID().'&amp;post_type=attachment&amp;post_mime_type=image');
	if($files) {
		$keys = array_reverse(array_keys($files));
		$num = $keys[0];
		$image = wp_get_attachment_image($num, 'large', false);
		if(!$image) return;
		$imgUri = explode('"', $image);
		$imagepath = $imgUri[1];
		$thumb = wp_get_attachment_url($num);
		$meta = wp_get_attachment_metadata($num);
		return array(
			'src' => $thumb,
			'title' => $files[$num]->post_title,
			'source' => $files[$num]->post_excerpt,
			'description' => $files[$num]->post_content
		);
	}
	return >false;
}

Pour appeler la fonction, il suffit d’intégrer ceci dans le loop :

$img = derniere_image();

J’ai presque réparé mon blogue, avec tous ces foutus problèmes de charset.

Cependant, mon éditeur graphique (TinyMCE) dans WordPress (2.3.2) ne s’affiche plus (j’obtiens une erreur javascript) et ma page de Widgets ne me permets plus d’ajouter plus d’un bloc de texte.

Quelqu’un pour m’aider?

EDIT : J’ai trouvé le moyen de rétablir TinyMCE. Le problème était la compression GZIP. Je l’ai désactivée dans le fichier /wp-includes/js/tinymce/tiny_mce_gzip.php comme suit :


if ((in_array('gzip', $encodings) OR in_array('x-gzip', $encodings) OR isset($_SERVER['---------------']))
	AND function_exists('ob_gzhandler')
	AND !ini_get('zlib.output_compression')
	AND  ini_get('output_handler') != 'ob_gzhandler')
{
	$enc = in_array('x-gzip', $encodings) ? "x-gzip" : "gzip";
	$supportsGzip = false;
}

Me reste à réparer la page des Sidebar Widgets

développement / Catégories

Twitter @emilegirard

Mots-clefs

Ailleurs

Méta