Snippets WordPress : Guide complet pour optimiser votre site sans plugin

Snippets WordPress : Guide complet pour optimiser votre site sans plugin

Les snippets WordPress sont des extraits de code puissants qui permettent de personnaliser son site WordPress sans plugin. Simples à implémenter, ils offrent une solution légère et flexible pour modifier le comportement de votre site, ajouter des fonctionnalités ou optimiser les performances sans alourdir votre installation avec des extensions parfois inutiles.

Que vous soyez développeur ou utilisateur averti, savoir ajouter, manipuler un snippet WordPress vous donne un contrôle précis sur votre site, tout en améliorant sa rapidité et sa stabilité. Dans cet article, nous verrons ce qu’est exactement un snippet, comment l’utiliser en toute sécurité, et je vous proposerais plusieurs exemples de snippets WordPress utiles à intégrer dès aujourd’hui pour améliorer votre site.

Qu’est-ce qu’un Snippet WordPress ?

Qu’est-ce qu’un Snippet WordPress ?

Un snippet WordPress est un extrait de code PHP que l’on insère dans le site pour ajouter ou modifier une fonctionnalité.

Contrairement à un plugin complet, un snippet est souvent très ciblé et léger : il peut par exemple désactiver les commentaires, afficher une information personnalisée, ou encore optimiser le chargement des scripts.

Ces bouts de code sont généralement placés dans le fichier functions.php du thème actif, mais il est aussi possible de les gérer via un plugin dédié ou en créant un plugin personnalisé.

En résumé, les snippets permettent d’étendre ou d’adapter WordPress à vos besoins spécifiques, sans avoir à écrire ou utiliser un plugin entier. Savoir manipuler les snippets sous WordPress est très important, notamment pour améliorer l’optimisation de votre blog.

Où s’utilisent les snippets WordPress ?

Il existe plusieurs manières d’ajouter un snippet WordPress, voilà quelques bonnes pratiques :

Dans le fichier functions.php de votre thème

C’est la méthode la plus courante : il suffit d’éditer le fichier functions.php de votre thème ou, mieux encore, de votre thème enfant, pour y coller votre snippet. WordPress exécutera automatiquement le code à chaque chargement.

  • Avantages : rapide, simple à mettre en œuvre.
  • Inconvénients : les modifications sont perdues si le thème est mis à jour (sauf dans un thème enfant).

Via un plugin de type Code Snippets

Des plugins comme Code Snippets offrent une interface visuelle pour gérer vos extraits de code sans toucher aux fichiers système. Vous pouvez les activer, les désactiver, et même les organiser par catégories.

  • Avantages : plus sûr, pas besoin d’accès FTP, interface conviviale.
  • Inconvénients : dépend d’un plugin (paradoxe si on cherche à les éviter).

Son installation est extrêmement simple et ne sera pas détaillé dans ce tutoriel. Un nouveau menu sera disponible dans l’administration de votre instance WordPress. Vous pourrez ajouter, supprimer, désactiver vos snippets très facilement.

Utiliser simplement des Snippets via un plugin de type Code Snippets

J’essaie d’avoir une nomenclature claire et compréhensible pour classer mes snippets pour m’y retrouver. Je les préfixe toujours de SECURITE (snippet de protection de Worpdress), SEO (amélioration du SEO de mon blog), ADMIN (Snippet qui affiche des informations dans la page d’administration de WordPress), ….

J’essaie d’avoir une nomenclature claire et compréhensible pour classer mes snippets

En créant votre propre plugin personnalisé (utilisation avancée)

Pour les utilisateurs avancés, créer un plugin personnel dédié à vos snippets est la méthode la plus propre. Vous isolez ainsi votre code personnalisé dans une structure indépendante du thème, idéale pour la portabilité et la maintenance.

  • Avantages : professionnel, structuré, indépendant du thème.
  • Inconvénients : nécessite de comprendre la structure de base d’un plugin WordPress.

Pour ce premier tutoriel, nous aborderons les snippets WordPress en utilisant le plugin Code Snippets. Ce plugin est gratuit mais propose une offre payante avec une sauvegarde vers le cloud et la possibilité entre autre de gérer des intégrations complètes de CSS, JavaScript, Gutenberg, Elementor.

Quelle est la différence entre un snippet et un plugin WordPress ?

Un snippet et un plugin peuvent accomplir des tâches similaires. Pourtant, ils diffèrent sur plusieurs points essentiels, comme vous allez le voir dans ce comparatif.

Pour faire simple, un snippet est idéal pour personnaliser rapidement WordPress sans surcharger votre site, tandis qu’un plugin est plus adapté à des besoins larges ou à des utilisateurs peu à l’aise avec le code.

Quelle est la différence entre un snippet et un plugin WordPress ?

Liste de snippets WordPress pratique à connaître

Je vous conseille de mettre en favoris cette page, car je la compléterai au fur et à mesure de mes besoins et de mes découvertes.

Voici quelques snippets que j’utilise quotidiennement sur mon blog à la place de plugin parfois très lourd.

Méthodes pour renvoyer un code 410 au lieu de 404 dans WordPress

Voici le premier snippet que j’utilise. Toujours dans le cadre de l’amélioration du SEO de mon blog, j’ai décidé de mettre en place une redirection 410 pour mes pages définitivement supprimées de mon blog.

La 410 est un code HTTP, pas une page affichée à l’utilisateur. Ce que voit le visiteur dépend de ce que vous décidez de lui montrer après avoir avoir envoyé le code 410 au navigateur et à Google par exemple.

Même si le code 410 est le bon pour Google, il est recommandé de prévoir une page personnalisée comme pour une 404.

Astuce!!! Tous les codes sources des snippets wordpress sont sur mon compte github.

Voici le code php à inclure dans l’extension Snippets (les commentaires sont assez parlant) :

Méthodes pour renvoyer un code 410 au lieu de 404 dans WordPress

Attention toute fois à la différence avec get_stylesheet_directory() et get_template_directory() .

  • get_template_directory() → retourne le chemin du thème parent.
  • get_stylesheet_directory() → retourne le chemin du thème actif (souvent un thème enfant).

Maintenant voici un extrait du code de la page 410, lorsqu’un visiteur tombe sur un article supprimé. Ce code a été adapté pour mon thème Sahifa, à vous de l’adapter au votre.

Comme toujours, je vous conseille d’utiliser un thème enfant pour votre thème WordPress.  Dans l’hypothèse que vous utilisiez un thème enfant, voici ou il faut mettre la page 410.php : wp-content/themes/votre-theme-child/410.php

Spécificités de cette version

  • Utilise Google Font : Varela Round
  • Applique cette police à toute la page
  • Reste 100% responsive, intégré au thème Sahifa
  • Code HTTP 410
  • Articles aléatoires (image + titre + date + catégorie) pour inciter l’utilisateur à cliquer sur d’autres articles et améliorer l’expérience utilisateur
  • Hover coloré en #E82759 sur les liens cliquables
  • Fond blanc pour la page

Modèle de page erreur 410 pour WordPress

Lorsqu’un visiteur tombe sur une erreur 410, voici la page qui sera affichée :

Ma page erreur 410 personnalisée pour WordPress

Vérifier que son snippet fonctionne correctement :

  • Vide le cache de ton plugin WordPress s’il y en a un (ex : LiteSpeed, WP Rocket…)
  • Vide le cache de ton navigateur (ou essaie en navigation privée)

Vérifiez facilement les codes d'état, les en-têtes de réponse et les chaînes de redirection avec le site httpstatus

Limiter les tentatives de connexion à l’interface d’admin de WordPress

Ce code bloque temporairement une adresse IP après plusieurs tentatives échouées de connexion à votre interface d’administration de WordPress.

Voici un snippet complet pour WordPress, qui :

  • Bloque temporairement les IP après X tentatives
  • Envoie une notification ntfy.sh ou sur un serveur auto-hébergé ntfsy au lieu d’un email
  • Le stockage des tentatives de connexions infructueuses sont réalisées via des transients
  • Vous avez accès à une interface d’administration depuis votre page admin de WordPress pour visualiser les attaques en cours et un bouton Supprimer pour libérer une IP.

Voici la structure du snippet de blocage des IP:

Limiter les tentatives de connexion à l’interface d’admin de WordPress

Voici la structure du snippet pour l’interface d’admin :

Structure du snippet WordPress pour l'interface d'admin des connexions bloquées

Maintenant dans l’interface d’administration, vous devriez voir apparaitre un nouvel item Blocage Connexions, qui affiche toutes les attaques en cours :

Voici l'interface du plugin pour voir les connexions bloquées

Vous avez accès à 2 boutons pour supprimer individuellement une connexion ou bien toutes les connexions de plus de 24 heures.

En plus vous recevez une alerte vis Ntfy, j’ai préféré ce moyen (vu que j’ai un serveur Ntfy), plutôt que le mail. Je le trouve plus rapide et toutes mes alertes sont concentrées dans une seule appli.

Recevez vos alertes via Ntfy, centraliser toutes vos lartes en les classant automatiquement

Voila pour l’instant 3 snippets bien pratique pour vous faire la main. D’autres arrivent dans quelques temps.

Sécuriser l’accès à l’administration WordPress

L’objectif principal de ce snippet  est de sécuriser l’accès à l’administration WordPress en modifiant l’URL d’accès standard (/wp-admin) vers une URL personnalisée (/mondashboard) sans utiliser de plugin.

Ce que ce snippet réalise :

  • Redirige la requête /mondashboard (a définir comme vous le souhaitez) vers la page de connexion WordPress si l’utilisateur n’est pas connecté, ou vers le tableau de bord s’il l’est.
  • Bloque complètement l’accès direct à /wp-admin pour les utilisateurs non connectés, en renvoyant une erreur 403 (Interdit).
  • Empêche l’accès direct à wp-login.php sans contexte de connexion, de redirection ou de déconnexion, pour éviter les tentatives d’attaque ou d’accès indésirables.
  • Permet l’affichage normal du message de déconnexion (URL avec ?loggedout=true) sans générer d’erreur.
  • Désactive la redirection canonique WordPress sur /mondashboard (votre uri que vous avez choisi) pour éviter toute redirection automatique vers /wp-admin ou ailleurs.

Pourquoi ce snippet est utile :

  • Sécurité renforcée : L’accès standard /wp-admin est une cible connue des attaques.
  • Personnalisation de l’URL admin : Permet d’utiliser une URL d’accès personnalisée (/mondashboard), masquant l’URL classique. Il faudra modifier manuellement dans le snippet.
  • Sans plugin : Pas besoin d’installer un plugin tiers, léger et facile à maintenir.
  • Bonne UX : Les utilisateurs légitimes ne sont pas bloqués et reçoivent des messages clairs (ex : message de déconnexion).

Voici le code du snippet (disponible sur mon Github) :

Sécuriser l’accès à l’administration WordPress

Petits conseils, si vous avez des soucis avec le snippet :

  • une fois le snippet actif, vider le cache de votre wordpress si vous utiliser un logiciel comme Vanish ou WP-Rocket, ….
  • réenregistre les permaliens après avoir ajouté le code (Réglages > Permaliens > Enregistrer les modifications, sans rien touché à ta structure actuelle)
  • tester en navigation privée ou en vidant le cache de ton navigateur

Voici quelques écrans :

Différents messages du plugin suite à une erreur de connexion

Différents messages du plugin suite à une erreur de connexion

Qu’est-ce qu’un transient dans WordPress ?

Qu’est-ce qu’un transient dans WordPress ?

Un transient est une méthode native de WordPress pour stocker temporairement des données en base de données, avec une durée de vie définie.

C’est comparable à un cache à durée limitée :

  • persiste même si la page est rechargée
  • disparaît automatiquement après expiration
  • stocké dans la table wp_options

Syntaxe d’utilisation

  • set_transient() : enregistre une donnée temporaire
  • get_transient() : récupère la donnée si elle n’est pas expirée
  • delete_transient() : la supprime manuellement

À quoi servent les transients dans notre snippet de sécurité  ?

Dans notre cas, les transients sont utilisés pour suivre les tentatives échouées de connexion, à chaque échec, on mémorise :

  • l’adresse IP du visiteur
  • le nom d’utilisateur saisi
  • le nombre d’essais
  • une date limite de blocage

Ces informations sont stockées dans un transient unique par IP, sous cette forme :

set_transient( 'tentatives_connexion_192.168.0.15', $data, 900 );

Cela signifie : « Je garde les données pendant 15 minutes. Passé ce délai, WordPress les supprime automatiquement. »

Déclencher un blocage temporaire

Quand une IP atteint par exemple les 4 échecs, on :

  • affiche un message d’erreur : « Réessayez plus tard »
  • bloque toute tentative pendant une durée (ex. 15 minutes)
  • envoie une notification via ntfy.sh

Et grâce au transient, plus besoin de base de données complexe ou de cron. WordPress effacera la donnée dès l’expiration.

Est-ce que les transients expirés sont automatiquement supprimés  ?

Les transients expirés :

  • ne sont plus retournés par get_transient()
  • mais restent présents dans la base de données jusqu’à ce qu’ils soient supprimés
  • ils sont nettoyés plus tard par WordPress  soit par une tâche cron (lancement aléatoire à chaque requête) ou manuellement par un développeur  (commande SQL)

Pour finir

Les snippets WordPress sont des outils puissants pour améliorer, optimiser ou sécuriser son site sans dépendre de plugins tiers. Faciles à intégrer dans functions.php ou via un plugin de gestion de code, ou dans un plugin maison, ils offrent une grande souplesse pour ceux qui souhaitent personnaliser leur site WordPress de manière légère et maîtrisée.

Avant de vous lancer, pensez toujours à tester vos snippets sur un site de développement et à sauvegarder vos fichiers. Et si vous débutez, commencez par quelques exemples de snippets WordPress utiles que vous pourrez adapter progressivement à vos besoins.

1 potin

  1. pourquoi $current_url = esc_url_raw($_SERVER[‘REQUEST_URI’]);

    function qt_serve_custom_410() {
    global $wp;

    $urls_410 = [
    ‘mon-article-a-supprimer’,
    ];

    if (!in_array(trim($wp->request, ‘/’), $urls_410, true)) {
    return;
    }

    status_header(410);
    nocache_headers();

    get_template_part(‘410’);

    exit;
    }
    add_action(‘template_redirect’, ‘qt_serve_custom_410’);

Laisser un commentaire

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