Ouvrir les liens de WordPress dans une nouvelle fenêtre

Le fichier functions.php est une mine d’or pour modifier votre WordPress.

Au niveau de l’ergonomie, rien de plus affligeant que d’avoir des liens externes qui rechargent la page, sans ouvrir une nouvelle fenêtre. Vous perdez ainsi bêtement des visiteurs.

Ouvrez vos liens externes dans une nouvelle fenêtre
Ouvrez vos liens externes dans une nouvelle fenêtre

Voici donc une petite fonction à ajouter pour que chaque lien externe situé dans vos commentaires s’ouvre dans une nouvelle fenêtre, via un target= »blank ».

Ouvrez le fichier functions.php de votre thème WordPress et collez-le code suivant :

function AddTargetBlankFilteringFunction($text)
  {return preg_replace('/href=["|\']?(http:\/\/(?!www\.seomix\.fr)([^"\']*))["|\']?/ui', "href=\"$1\" title=\"Site externe : $1\" target=\"_blank\"", $text);}
  add_filter( 'get_comment_author_link', 'AddTargetBlankFilteringFunction');
  add_filter( 'get_comment_author_url_link', 'AddTargetBlankFilteringFunction');
  add_filter('comment_text', 'AddTargetBlankFilteringFunction');

Pensez à modifier la troisième ligne par l’url de votre site (au niveau du preg_replace). Cela évitera d’ouvrir les liens internes dans une nouvelle fenêtre…

Voilà, c’est désormais chose faite : chaque lien contenu dans un commentaire s’ouvrira automatiquement dans un nouvel onglet, qu’il s’agisse d’une url contenue dans le corps du commentaire, ou dans le nom de l’utilisateur.

Notez également que le filtre peut être adapté pour le contenu de vos articles. Il vous suffira de remplacer ou d’ajouter un add_filter.

add_filter('the_content', 'AddTargetBlankFilteringFunction');

Mais rendons à César ce qui est à César. Le premier extrait de code est directement tiré d’une extension WordPress : Target blank for external sites

Daniel Roch

Fondateur, conférencier, auteur, consultant et expert SEO WordPress

18 Commentaires

IBuzzyou Le 03 mai 2010 à 14h48
Le target blank dans les articles est seulement pour les liens externes ?
Laurent B. Le 16 août 2010 à 11h50
Alors je ne sais pas si c'est moi, mais ce code fait des liens externes uniquement sur les liens internes justement. Je ne connais pas trop les expressions régulières, mais est-ce qu'il n'y a pas quelque chose pour rajouter le target blank à tous ce qui est un lien, mais dont l'adresse ne contient pas l'url du site ?
Daniel Roch Le 16 août 2010 à 13h26
@Laurent : tu as bien modifié cette partie du code avec ton site ? www\.seomix\.fr
Laurent B. Le 16 août 2010 à 15h24
Oui, tout à fait ! Mais quand je lis la regex, bah je vois "remplacer tous les liens qui contiennent seomix.fr par le même lien avec le title site externe [...] et un target blank". Ou alors peut-être que je ne sais plus lire une regex ^^
Mais j'ai trouvé l'extension external links qui fonctionne très bien et permet également de rajouter une icône à côté du lien pour préciser que c 'est un lien externe.

Que penses-tu de ceux qui disent qu'ouvrir les liens dans de nouvelles fenêtres déroute les utilisateurs en termes d'ergonomie ?
Daniel Roch Le 16 août 2010 à 16h11
Le code fonctionne bien. Regarde au tout début, il y a un "?" qui indique de tester si c'est un lien interne, et d'appliquer le reste si ce n'est pas le cas.{return preg_replace('/href=["|\']?...
Pour tout autre question, tout dépend du lien en ce qui me concerne. En ergonomie, je trouve illogique une nouvelle fenêtre quand il s'agit de la suite logique de la page ou de l'article. Mais s'il s'agit d'une source, ou d'un lien de commentaire, je trouve logique le lien dans la nouvelle fenêtre. Question de goût comme on dit. ^^
Laurent B. Le 16 août 2010 à 17h08
D'accord pour le code, j'avais mal vu. Il ne fonctionnait pourtant pas, mais je ne comprends pas trop pourquoi. Peut-être une interaction avec un autre plugin, qui sait. Bref ce n'est plus important pour moi ^^

Merci pour ta réponse sur l'ergonomie : j'ai le même avis que toi (j'ai d'ailleurs pris l'habitude de faire un clic milieu sur les liens externes voire sur les liens internes connexes). Mais je me demande si c'est pareil pour l'internaute lambda (et ça je me doute que tu n'as pas la réponse ^^)
Fabien Le 20 août 2010 à 10h48
Merci !
Simple et efficace :)
staff Le 09 février 2011 à 18h14
C'est excellent, merci pour le code ;-)
besky Le 21 juin 2011 à 10h59
Bonjour,

Merci pour l'astuce mais si je ne me trompe, le "target: _blank" est déprécié par la W3C non ?

Dans ce cas ne serait-il pas plus judicieux d'utiliser du javascript ?
Daniel Roch Le 23 juin 2011 à 12h27
Le javascript alourdit la page, et la dépréciation du W3C n'a aucun impact, ni en référencement ni en rendu visuel et ni en vitesse. Donc autant garder le target _blank pour ouvrir ces liens dans une nouvelle fenêtre.
Jérémy Le 12 septembre 2011 à 3h25
Il ne faut pas abuser du target blank, qui n’est pas conforme aux recommandations du W3C et aux normes d’accessibilité. Il perturbe la navigation des aveugles, mal voyants, et beaucoup d’internautes sont agacés par ces liens qui s’ouvrent obligatoirement dans un nouvel onglet.

Lorsque le target blank n’est pas utilisé, l’internaute peut choisir d’ouvrir la page dans le même onglet ou dans un nouvel onglet (en cliquant sur le lien tout en maintenant la touche Ctrl enfoncée par exemple).

Il vaut mieux utiliser le script Shadowbox qui permet d’ouvrir les pages Web dans une petite fenêtre sans que l’internaute ne quitte le site. Mais là aussi c’est à utiliser avec modération.
Brice Le 13 avril 2012 à 18h25
Bonjour Daniel;
J'ai découvert ton blog il y a quelques jours et il est réellement instructif ... merci pour tes conseils.
Un soucis cependant en lien avec le hack concernant la balise "more" ... en cliquant sur ce lien, mon navigateur ouvre une nouvel onglet !?
Merci
Daniel Roch Le 14 avril 2012 à 11h39
Pour enlever l'ouverture dans un nouvel onglet pour le lien more de WordPress, il suffit d'enlever le code suivant dans le script donné plus haut :
[pastacode lang="bash" provider="manual"]target=\"_blank\"[/pastacode]
Brice Le 26 avril 2012 à 19h27
Merci Daniel ça fonctionne
am3yrus Le 26 septembre 2012 à 17h08
Petite modification:

[pastacode lang="bash" provider="manual"]function AddTargetBlankFilteringFunction($text){
$url = home_url() ;
return preg_replace('/href=["|']?(http://(?!$url)([^"']*))["|']?/ui', "href="$1"target="_blank"", $text);
}
add_filter( 'get_comment_author_link', 'AddTargetBlankFilteringFunction');
add_filter( 'get_comment_author_url_link', 'AddTargetBlankFilteringFunction');
add_filter('comment_text', 'AddTargetBlankFilteringFunction');[/pastacode]

Comme ça, tu ne casses plus la tête à modifier le nom de domaine dans ta fonction, il va le chercher tout seul comme un grand ;)
Daniel Roch Le 27 septembre 2012 à 10h50
@am3yrus : le code que tu as donné ne fonctionne malheureusement pas. Il ouvre un onglet même sur une URL du site concerné...
Rico Le 19 novembre 2014 à 16h50
Bonjour,

Je viens de faire votre astuce pour ouvrir les liens de WordPress dans une nouvelle fenêtre pour les commentaires et les articles, mais , serait il possible de faire de même pour les lien en sidebar?

Merci
    Daniel Roch Le 20 novembre 2014 à 12h59
    Malheureusement, il n'y a pas de code type pour ça car cela dépend de votre thème et de la façon dont la sidebar est connue.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *