Google Analytics et WordPress

Pour installer le code de Google Analytics sur WordPress, on peut le faire directement dans son thème, placé en haut de page, juste avant .

Voici le code de base de GA, où XXX est l’identifiant de votre profil :

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXX']);
_gaq.push(['_trackPageview']);

(function() {
  var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
  ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
  var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();

Minifiez votre thème

Pour minifier vos fichiers, copier/coller le contenu de vos fichiers dans ces deux outils, et le tour est joué :

Ajouter des boutons de partage

Pour ajouter facilement des fonctions de partages sur les réseaux sociaux, utilisez tout simplement les codes suivants (il ne vous restera que la mise en page à faire).

Partager sur Facebook

<a href="http://www.facebook.com/share.php?u=" target="blank" rel="nofollow" title="Partagez cet article sur Facebook">Partager sur facebook</a>

Partager sur Twitter

<a href="http://twitter.com/home?status=" target="blank" rel="nofollow" title="Partagez cet article sur Twitter">Partager sur Twitter</a>

Partager par email

<a href="mailto:?subject=Un%20ami%20vous%20fait%20partager%20:%20&body=Découvrez%20<strong></strong>%20:%20<a href=></a>" rel="nofollow" title="Partagez cet article par Email">Email</a>

Le partage par email ouvre le client mail de l’utilisateur, en remplissant par défaut le titre du mail et une partie du contenu. Remplacez le passage après « subject » par votre contenu, sachant que %20 veut dire « espace ».

Installer Feedburner avec WordPress

Dans le fichier .htaccess situé à la racine de votre site, copiez/collez ce code en remplaçant l’adresse de votre flux Feedburner.

RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} !FeedBurner    [NC]
RewriteCond %{HTTP_USER_AGENT} !FeedValidator [NC]
RewriteRule ^feed/?([_0-9a-z-]+)?/?$ http://adresse-de-votre-flux [R=302,NC,L]

Un bouton de RT pour WP

Pour avoir un bouton de RT d’un article, rien de plus simple. Il suffit de réutiliser le même code que celui donné plus haut pour le partage d’un article sur Twitter…

<a href="http://twitter.com/home?status=" target="blank" rel="nofollow" title="Partagez cet article sur Twitter">Partager sur Twitter</a>

Inconvénient, vous n’avez pas le nombre de RT.

Vos derniers Tweets sur WordPress

Pour afficher vos derniers tweets, c’est un poil plus compliqué.

  • un nombre X de tweets
  • sans bugs sur les caractères spéciaux
  • avec l’heure du tweet affiché sous la forme « il y a x minutes »
  • compatibles avec php4 et php5
  • le tout mis en cache dans WordPress pendant 10 minutes.

Cela donne ce code à ajouter au fichier functions.php de votre thème. Modifiez uniquement le début avec vos paramètres :

// Mes derniers tweets
function twitterstatut() {
  ob_start();
  //paramètres
    $username = "nomducompte"; //Nom de votre compte
    $limit = "4";//nombre de tweets à afficher
    $tweetprefix = "
	<li>"; //avant chaque tweet
    $tweetsuffix = "</li>
"; //apres chaque tweet
  //Recuperation du flux
  $feed = "http://search.twitter.com/search.atom?q=from:" . $username . "&rpp=" . $limit;
    $ch = curl_init();
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($ch, CURLOPT_URL, $feed);
      $twitterFeed = curl_exec($ch);
      curl_close($ch);
  //nettoyage du flux
    $twitterFeed = str_replace("<", "", $twitterFeed);
    $twitterFeed = str_replace(""", "\"", $twitterFeed);
    $twitterFeed = str_replace("'", "'", $twitterFeed);
    $twitterFeed = str_replace("&", "&", $twitterFeed);
    $clean = explode("", $twitterFeed);
    $cleandate = explode("", $twitterFeed);
    $amount = count($clean) - 1;
    $amount = count($cleandate) - 1;
  //rendu du flux
    for ($i = 1; $i <= $amount; $i++) {
      $cleaner = explode("", $clean[$i]);
      $cleanerbis = explode("", $cleandate[$i]);
      $mydate = strtotime($cleanerbis[0]);
      $time_diff = time() - $mydate;
      if ( $time_diff > 0 )$display = sprintf( __('%s ago'), human_time_diff( $mydate ) );
      $rendu = $tweetprefix.$cleaner[0].'<span class="petit"> ['.$display.']</span>'.$tweetsuffix;
      echo $rendu;}
    return ob_get_clean();}
add_option('cachetwithtml','0','','yes');
add_option('cachetwittimer',mktime() - 10000,'','yes');
function cachetwit() {
  $time3 = mktime();
  if ( $time3 > get_option('cachetwittimer') + 600 ) {
    $myvar = twitterstatut();
    update_option('cachetwittimer', mktime());
    if ( $myvar == '') {}
    else {update_option('cachetwithtml', $myvar);}}
echo get_option('cachetwithtml');}

Le cache est mis à défaut à 10 minutes (600 secondes). Vous pouvez donc le modifier facilement (6ème ligne avant la fin). Ajoutez ensuite ce code là où vous voulez afficher vos tweets.

Ajouter un fil d’Ariane (Breadcrumb)

Pour installer facilement un fil d’Ariane sur le CMS WordPress, rien n’est plus simple. Voici le code à ajouter dans le fichier functions.php de votre thème :

<?php
/* BreadCrumbs */
// Get parent categories with schema.org data
function my_get_category_parents($id, $link = false,$separator = '/',$nicename = false,$visited = array()) {
	$final = '';
	$parent = &get_category($id);
	if (is_wp_error($parent))
	return $parent;
	if ($nicename)
		$name = $parent->name;
	else
		$name = $parent->cat_name;
	if ($parent->parent && ($parent->parent != $parent->term_id ) && !in_array($parent->parent, $visited)) {
		$visited[] = $parent->parent;
		$final .= my_get_category_parents( $parent->parent, $link, $separator, $nicename, $visited );
	}
	if ($link)
		$final .= '<span typeof="v:Breadcrumb"><a href="' . get_category_link( $parent->term_id ) . '" title="Voir tous les articles de '.$parent->cat_name.'" rel="v:url" property="v:title">'.$name.'</a></span>' . $separator;
	else
		$final .= $name.$separator;
	return $final;
}


// Breadcrumb
function seomix_content_breadcrumb() {
	// Global vars
	global $wp_query;
	$paged = get_query_var('paged');
	$sep = ' » ';
	$data = '<span typeof="v:Breadcrumb">';
	$dataend = '</span>';
	$final = '<div xmlns:v="http://rdf.data-vocabulary.org/#">Vous êtes ici : ';  
	$startdefault = $data.'<a title="'. get_bloginfo('name') .'" href="'.home_url().'" rel="v:url" property="v:title">'. get_bloginfo('name') .'</a>'.$dataend;
	$starthome = 'Accueil de '. get_bloginfo('name');

	// Breadcrumb start
	if ( is_front_page() && is_home() ){
		// Default homepage
		if ( $paged >= 1 )    
			$final .= $startdefault;
		else
			$final .= $starthome;
	} elseif ( is_front_page() ){
		//Static homepage
		$final .= $starthome;
	} elseif ( is_home() ){
		//Blog page
		if ( $paged >= 1 ) {   
			$url = get_page_link(get_option('page_for_posts'));  
			$final .= $startdefault.$sep.$data.'<a href="'.$url.'" rel="v:url" property="v:title" title="Les articles">Les articles</a>'.$dataend;}
		else
			$final .= $startdefault.$sep.'Les articles';
	} else {
		//everyting else
		$final .= $startdefault.$sep;
}

	// Prevent other code to interfer with static front page et blog page
	if ( is_front_page() && is_home() ){// Default homepage
	} elseif ( is_front_page()){//Static homepage
	} elseif ( is_home()){//Blog page
	}
	//Attachment
	elseif ( is_attachment()){
		global $post;
		$parent = get_post($post->post_parent);
		$id = $parent->ID;
		$category = get_the_category($id);
		$category_id = get_cat_ID( $category[0]->cat_name );
		$permalink = get_permalink( $id );
		$title = $parent->post_title;
		$final .= my_get_category_parents($category_id,TRUE,$sep).$data."<a href='$permalink' rel='v:url' property='v:title' title='$title'>$title</a>".$dataend.$sep.the_title('','',FALSE);
	}
	// Post type
	elseif ( is_single() && !is_singular('post')){
		global $post;
		$nom = get_post_type($post);
		$archive = get_post_type_archive_link($nom);
		$mypost = $post->post_title;
		$final .= $data.'<a href="'.$archive.'" rel="v:url" property="v:title" title="'.$nom.'">'.$nom.'</a>'.$dataend.$sep.$mypost;
	}
	//post
	elseif ( is_single()){
		// Post categories
		$category = get_the_category();
		$category_id = get_cat_ID( $category[0]->cat_name );
		if ($category_id != 0)
			$final .= my_get_category_parents($category_id,TRUE,$sep);
		elseif ($category_id == 0) {
			$post_type = get_post_type();
			$tata = get_post_type_object( $post_type );
			$titrearchive = $tata->labels->menu_name;
			$urlarchive = get_post_type_archive_link( $post_type );
			$final .= $data.'<a class="breadl" href="'.$urlarchive.'" title="'.$titrearchive.'" rel="v:url" property="v:title">'.$titrearchive.'</a>'.$dataend;}
		// With Comments pages
		$cpage = get_query_var( 'cpage' );
		if (is_single() && $cpage > 0) {
			global $post;
			$permalink = get_permalink( $post->ID );
			$title = $post->post_title;
			$final .= $data."<a href='$permalink' rel='v:url' property='v:title' title='$title'>$title</a>".$dataend;
			$final .= $sep."Commentaires page $cpage";}
		// Without Comments pages
		else
			$final .= the_title('','',FALSE);
	}
	// Categories
	elseif ( is_category() ) {
		// Vars
		$categoryid       = $GLOBALS['cat'];
		$category         = get_category($categoryid);
		$categoryparent   = get_category($category->parent);
		//Render
		if ($category->parent != 0) 
			$final .= my_get_category_parents($categoryparent, true, $sep, true);
		if ( $paged <= 1 )
			$final .= single_cat_title("", false);
		else
			$final .= $data.'<a href="' . get_category_link( $category ) . '" title="Voir tous les articles de '.single_cat_title("", false).'" rel="v:url" property="v:title">'.single_cat_title("", false).'</a>'.$dataend;
	}
	// Page
	elseif ( is_page() && !is_home() ) {
		$post = $wp_query->get_queried_object();
		// Simple page
		if ( $post->post_parent == 0 )
			$final .= the_title('','',FALSE);
		// Page with ancestors
		elseif ( $post->post_parent != 0 ) {
			$title = the_title('','',FALSE);
			$ancestors = array_reverse(get_post_ancestors($post->ID));
			array_push($ancestors, $post->ID);
			$count = count ($ancestors);$i=0;
			foreach ( $ancestors as $ancestor ){
				if( $ancestor != end($ancestors) ){
					$name = strip_tags( apply_filters( 'single_post_title', get_the_title( $ancestor ) ) );
					$final .= $data.'<a title="'.$name.'" href="'. get_permalink($ancestor) .'" rel="v:url" property="v:title">'.$name.'</a>'.$dataend;
					$i++;
					if ($i < $ancestors)
						$final .= $sep;
					}
					else 
						$final .= strip_tags(apply_filters('single_post_title',get_the_title($ancestor)));
				}
			}
	}
	// authors
	elseif ( is_author() ) {
		if(get_query_var('author_name'))
			$curauth = get_user_by('slug', get_query_var('author_name'));
		else
			$curauth = get_userdata(get_query_var('author'));
		$final .= "Articles de l'auteur ".$curauth->nickname;
	}
	// tags
	elseif ( is_tag() ){
		$final .= "Articles sur le thème ".single_tag_title("",FALSE);
	}
	// Search
	elseif ( is_search() ) {
		$final .= "Résultats de votre recherche sur \"".get_search_query()."\"";
	}
	// Dates
	elseif ( is_date() ) {
		if ( is_day() ) {
			$year = get_year_link('');
			$final .= $data.'<a title="'.get_query_var("year").'" href="'.$year.'" rel="v:url" property="v:title">'.get_query_var("year").'</a>'.$dataend;
			$month = get_month_link( get_query_var('year'), get_query_var('monthnum') );
			$final .= $sep.$data.'<a title="'.single_month_title(' ',false).'" href="'.$month.'" rel="v:url" property="v:title">'.single_month_title(' ',false).'</a>'.$dataend;
			$final .= $sep."Archives pour ".get_the_date();
		}
		elseif ( is_month() ) {
			$year = get_year_link('');
			$final .= $data.'<a title="'.get_query_var("year").'" href="'.$year.'" rel="v:url" property="v:title">'.get_query_var("year").'</a>'.$dataend;
			$final .= $sep."Archives pour ".single_month_title(' ',false);
		}
		elseif ( is_year() )
			$final .= "Archives pour ".get_query_var('year');
	}
	// 404 page
	elseif ( is_404())
		$final .= "404 Page non trouvée";
	// Other Archives
	elseif ( is_archive() ){
		$posttype = get_post_type();
		$posttypeobject = get_post_type_object( $posttype );
		$taxonomie = get_taxonomy( get_query_var( 'taxonomy' ) );
		$titrearchive = $posttypeobject->labels->menu_name;
		if (!empty($taxonomie))
			$final .= $taxonomie->labels->name;
		else
			$final .= $titrearchive;
	}
	// Pagination
	if ( $paged >= 1 )
		$final .= $sep.'Page '.$paged;
	// The End
	$final .= '</div>';
	echo $final;
}
?>

Une fois cette étape réalisée, rendez-vous dans les autres fichiers du thème pour y ajouter ce code, ce qui ajoutera le chemin de navigation.

<?php if (function_exists('my_get_category_parents')) my_get_category_parents(); ?>

Vous devrez répéter cette étape dans l’ensemble des fichiers de votre thème WordPress, à savoir dans :

  • home.php
  • index.php
  • single.php
  • page.php
  • category.php
  • author.php
  • archive.php

Si votre thème est bien conçu, il est possible que vous n’ayez qu’un seul fichier à changer pour ajouter le fil d’Ariane, par exemple avec le fichier header si celui-ci est commun à toutes les pages du site et qu’il inclut le haut de vos pages.

Personnaliser le flux RSS

Voici le code à ajouter dans votre functions.php pour insérer du contenu dans votre flux RSS.

Code simple

// personnalisation du flux rss
function insertAds($content) {
	global $post;
	$content = 'votre contenu'
	return $content;
}
add_filter('the_excerpt_rss', 'insertAds');
add_filter('the_content_rss', 'insertAds');

Code plus complexe

  • ajout d’une miniature
  • ajout d’un lien vers l’article complet
  • ajout d’un lien vers les commentaires
<?php
// personnalisation du flux rss
function insertAds($content) {
	global $post;
	$thetitle = $post->post_title;
	if(has_post_thumbnail($post->ID)) {
		$content = '<div>' . get_the_post_thumbnail($post->ID,'thumbnail') . '</div>
		' . $content.'
		</strong><a href="'.get_permalink().'#comments" title="Commenter '.get_the_title().'">Commentez cet article !</a></strong>
		<strong>Article original :</strong> <a href="'.get_permalink().'">'.get_the_title().'</a>.
		<hr />';
	}
	else {
		$content = $content.'
		</strong><a href="'.get_permalink().'#comments" title="Commenter '.get_the_title().'">Commentez cet article !</a></strong>
		<strong>Article original :</strong> <a href="'.get_permalink().'">'.get_the_title().'</a>.
		<hr />';
	}
	return $content;
}
add_filter('the_excerpt_rss', 'insertAds');
add_filter('the_content_rss', 'insertAds');

Source