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