Comment insérer du code PHP dans un article ou une page WordPress ?

Vous le savez peut-être (ou pas), je suis également responsable de la création d’un site WordPress de tutoriels gratuits, Astuces et Aide Informatique. Le but de ce site (également sous WordPress) est de proposer des ressources gratuites pour les utilisateurs les moins avancés en informatique in de les aider à mieux appréhender les outils numériques (ordinateur mais aussi smartphone ou tablette tactile).
J’ai rencontré récemment un problème avec un de mes articles qui permet d’afficher l’adresse IP du visiteur. J’utilise depuis peu un service d’optimisation publicitaire qui sert en quelque sorte de proxy entre l’utilisateur et le visiteur. Résultat des courses : mon article qui auparavant affichait l’adresse IP du visiteur par l’intermédiaire d’une extension WordPress affichait donnait l’adresse IP du relai, hébergé par Amazon Web Services (services et produits de Cloud d’Amazon).

J’ai finalement réussi à trouver une solution technique (décrite plus bas pour celles et ceux que ça intéresse) pour afficher la bonne IP du visiteur. Mais nouveau problème ! Je devais me passer du plugin utilisé jusqu’à présent et me servir d’un code PHP personnalisé que je devais insérer dans mon article. C’était la première fois que je voulais injecter du code PHP directement dans mon article. Et je ne savais pas comment faire… Heureusement, j’ai trouvé une solution simple à mettre en place à l’aide d’un snippet WordPress et d’un shortcode pour WordPress.

Insérer du code PHP dans un page, un widget ou un article WordPress

Solution pour afficher du code PHP dans une page ou un article WordPress sans extension

Je suis d’abord tombé sur de vieux articles qui dataient d’il y a 5-6 ans et expliquaient qu’on pouvait facilement utiliser du code PHP dans une page ou un article WordPress en mettant le code PHP via le shortcode adéquat : [PHP][/PHP]. Malheureusement, cela n’a pas fonctionné… J’avais juste à l’écran le shortcode affiché dans l’article sans affichage de l’adresse IP récupéré par mon script.

J’ai également vu qu’il existait des extensions pour utiliser du code PHP dans des pages / articles / widgets WordPress comme Woody ad snippets, PHP Everywhere ou Insert PHP Code Snippet. Mais passer par un plugin pour se servir de PHP ne m’enchantait guère, notamment parce que plusieurs de ces modules n’étaient pas à jour et incompatibles avec ma version (à jour, elle) de WordPress.

J’ai donc trouvé une solution alternative en farfouillant dans le web : créer un snippet dans le fichier functions.php de mon template WordPress et afficher le résultat via un shortcode personnalisé.

Insérer facilement du PHP dans vos pages WordPress !

Voilà comment faire pour insérer du code PHP dans vos widgets / articles / pages WordPress :

  1. Créer votre fonction personnalisée dans le fichier functions.php de votre thème WordPress.
  2. Assigner le résultat de votre fonction à un shortcode via la fonction de WordPress add_shortcode . Pour la documentation en anglais sur cette fonction référence : https://codex.wordpress.org/Function_Reference/add_shortcode.
  3. Utiliser votre shortcode personnalisé dans votre page / widget ou article WordPress.

Finie la théorie, passons maintenant à la pratique avec l’exemple de création d’un snippet pour afficher l’IP d’un visiteur et son shortcode associé.

Comment afficher l’adresse IP d’un visiteur de votre site WordPress ?

Pour afficher l’IP de votre visiteur depuis votre site WordPress, il existe 2 solutions : utiliser un plugin dédié ou un snippet et son shortcode.

Les plugins WordPress pour afficher l’IP d’un visiteur

L’avantage de l’utilisation d’une extension WordPress, c’est que si vous venez à changer de thème WordPress, vous n’aurez pas à recopier votre snippet et shortcode personnalisé dans votre nouveau thème. Car si vous veniez à changer de thème sans le faire, votre shortcode et sa fonctionne personnalisée ne fonctionnerait bien sûr plus. L’inconvénient : l’utilisation d’un plugin dédié est bien sûr plus lourde que le petit bout de code que je vais vous proposer…

Voici deux plugins qui permettent de montrer l’adresse IP des visiteurs :

Pour plus d’extensions concernant les IP, consultez le répertoire officiel des extensions WordPress : https://fr.wordpress.org/plugins/search/IP/
Vous y trouverez des plugins qui permettent de changer la langue du site WordPress selon l’IP du visiteur ou des plugins qui restreignent l’accès de votre site aux utilisateurs de certains pays en se basant sur leur adresse IP.

Afficher l’IP d’un visiteur dans un site WordPress sans plugin

Autre solution : montrer l’IP du visiteur sans plugin WordPress grâce au petit bout de code que je vous propose !

Voici le code PHP à copier dans le fichier functions.php du thème de votre site WordPress :

/* affichage simple de l' adresse IP du visiteur */
function ip_visiteur() {
	$ip = $_SERVER['REMOTE_ADDR'];
}
add_shortcode( 'affiche_ip', 'ip_visiteur' );

Une fois ce code copié dans le fichier functions.php, allez dans l’article ou la page concernée puis utilisez le shortcode créé par le code ci-dessus via la fonction WordPress add_shortcode  : copiez [affiche_ip][/affiche_ip] dans votre éditeur à l’endroit de la page de où vous voulez afficher l’IP. C’est tout !

Afficher l’adresse IP d’un visiteur derrière un proxy

Il peut arriver cependant que votre visiteur soit derrière un proxy. Dans ce cas l’IP affichée par le code basique ci-dessus n’est pas la bonne.

Voici la version améliorée de la fonction PHP (à copier dans votre fichier functions.php) qui permet de récupérer l’adresse IP d’un visiteur de votre site :

/* code complet pour afficher une adresse IP */
function ip_visiteur() {
	if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
		$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
	}
	elseif(isset($_SERVER['HTTP_CLIENT_IP']))
	{
		$ip = $_SERVER['HTTP_CLIENT_IP'];
	}
	else
	{
		$ip = $_SERVER['REMOTE_ADDR'];
	}
	return $ip;
}
add_shortcode( 'affiche_ip', 'ip_visiteur' );

Comme pour le code précédent, il vous faudra ensuite utiliser le shortcode [affiche_ip][/affiche_ip] à l’endroit où vous voulez montrer l’IP.

Afficher l’adresse IP du visiteur et non d’Amazon Web Services

Dans mon cas précis (utilisation d’un service hébergé dans le cloud d’Amazon, AWS), ce code ne fonctionnait toujours pas… Impossible de trouver l’adresse IP correcte de mes visiteurs. J’ai trouvé la solution en utilisant la fonction PHP apache_request_headers qui inspecte les en-têtes HTTP d’Apache (le serveur HTTP le plus répandu).

Voici donc le code qui m’a permis de récupérer la bonne adresse IP de mes visiteurs :

/* affiche l'adresse IP du visiteur à travers AWS */
function ip_visiteur() {
	$headers = apache_request_headers(); 
	$ip = $headers["X-Real-Ip"];
	return $ip;
}
add_shortcode( 'affiche_ip', 'ip_visiteur' );

Cela vous sera peut-être utile si vous utilisez vous aussi AWS ou Cloudflare !

One Comment on “Comment insérer du code PHP dans un article ou une page WordPress ?”

  1. Merci pour ces infos, très pratiques et surtout à jour, on s’égare parois dans des articles obsolètes, d’où l’utilité de ce blog…

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *.
Les commentaires sont publiés après modération.