Temps de lecture estimé : 33 minute(s).

Snippets WordPress : 100 ressources pour vous faciliter la vie !

Un snippet WordPress est un petit morceau de code qui permet d’ajouter ou de modifier des fonctionnalités sur un site WordPress sans avoir à réécrire une page entière ou à utiliser un plugin complexe. Ces extraits de code peuvent être utilisés pour personnaliser un site en fonction de ses besoins spécifiques, et ils sont généralement ajoutés dans des fichiers comme functions.php du thème, dans un plugin personnalisé, ou parfois via un gestionnaire de snippets de code dans le tableau de bord.

Les snippets WordPress peuvent couvrir une large gamme de tâches, allant de la modification de l’apparence du site à l’ajout de nouvelles fonctionnalités, en passant par l’optimisation des performances et la gestion des comportements utilisateurs. Par exemple, un snippet peut servir à :

  • Ajouter un champ de recherche dans le menu,
  • Limiter la longueur des extraits d’articles,
  • Désactiver les commentaires sur certains types de contenu,
  • Personnaliser l’email de réinitialisation du mot de passe,
  • Améliorer la sécurité en modifiant certains paramètres du site.

En général, les snippets WordPress sont une solution rapide et flexible pour apporter des ajustements à un site sans toucher au code source de manière trop invasive. Ils permettent aussi aux utilisateurs de mieux comprendre comment WordPress fonctionne sous le capot et d’étendre ses capacités sans nécessiter des connaissances avancées en développement.

Il est essentiel de savoir que certains snippets peuvent entrer en conflit avec d’autres codes ou plugins, il est donc recommandé de les tester sur un environnement de développement avant de les implémenter sur un site en production.

En résumé, un snippet WordPress est un moyen puissant, pratique et léger pour améliorer ou personnaliser un site WordPress, tout en offrant une flexibilité accrue aux utilisateurs et aux développeurs.

Voici quelques exemples de snippets pour WordPress, couvrant différents aspects comme l’administration, les fonctionnalités et la personnalisation. Les snippets peuvent être ajoutés au fichier functions.php de votre thème actif ou dans un plugin spécifique au site.

1. Désactiver l’éditeur Gutenberg et revenir à l’éditeur classique

php
add_filter('use_block_editor_for_post', '__return_false', 10);
add_filter('use_block_editor_for_post_type', '__return_false', 10);

2. Ajouter un rôle utilisateur personnalisé

php
add_action('init', function() {
add_role('custom_role', __('Custom Role'), [
'read' => true,
'edit_posts' => false,
'delete_posts' => false,
]);
});

3. Rediriger les utilisateurs non-administrateurs après connexion

php
add_filter('login_redirect', function($redirect_to, $request, $user) {
if (!is_wp_error($user) && !in_array('administrator', $user->roles)) {
return home_url();
}
return $redirect_to;
}, 10, 3);

4. Supprimer les versions des scripts et styles dans l’URL

php
add_filter('style_loader_src', 'remove_cssjs_ver', 10, 2);
add_filter('script_loader_src', 'remove_cssjs_ver', 10, 2);
function remove_cssjs_ver($src) {
return remove_query_arg(‘ver’, $src);
}

5. Changer la longueur de l’extrait (excerpt)

php
add_filter('excerpt_length', function($length) {
return 20; // Remplacez par le nombre de mots souhaité
});

6. Ajouter un message de bienvenue dans le tableau de bord

php
add_action('admin_notices', function() {
echo '<div class="notice notice-success is-dismissible">
<p>Bienvenue dans l'administration de votre site WordPress !</p>
</div>'
;
});

7. Désactiver les emojis pour améliorer les performances

php
remove_action('wp_head', 'print_emoji_detection_script', 7);
remove_action('wp_print_styles', 'print_emoji_styles');

8. Rediriger la recherche vers une page spécifique si un mot-clé est utilisé

php
add_action('template_redirect', function() {
if (is_search() && get_search_query() === 'exemple') {
wp_redirect(home_url('/page-specifique/'));
exit;
}
});

9. Désactiver l’accès au fichier xmlrpc.php

php
add_filter('xmlrpc_enabled', '__return_false');

10. Ajouter un champ personnalisé dans le profil utilisateur

php

add_action('show_user_profile', 'custom_user_profile_fields');
add_action('edit_user_profile', 'custom_user_profile_fields');
function custom_user_profile_fields($user) {
?>
<h3>Informations supplémentaires</h3>
<table class= »formtable« >
<tr>
<th><label for= »custom_field« >Champ personnalisé</label></th>
<td>
<input type= »text » name= »custom_field » id= »custom_field » value= »<?php echo esc_attr(get_user_meta($user->ID, ‘custom_field‘, true)); ?> » class= »regulartext » /><br />
<span class= »description« >Saisissez une information personnalisée ici.</span>
</td>
</tr>
</table>
<?php
}

add_action(‘personal_options_update‘, ‘save_custom_user_profile_fields‘);
add_action(‘edit_user_profile_update‘, ‘save_custom_user_profile_fields‘);

function save_custom_user_profile_fields($user_id) {
if (!current_user_can(‘edit_user’, $user_id)) {
return false;
}
update_user_meta($user_id, ‘custom_field’, $_POST[‘custom_field’]);
}

11. Limiter les tentatives de connexion

Ce snippet ajoute une limite au nombre de tentatives de connexion pour renforcer la sécurité.

php

add_filter('authenticate', 'limit_login_attempts', 30, 3);

function limit_login_attempts($user, $username, $password) {
$ip = $_SERVER[‘REMOTE_ADDR’];
$login_attempts = get_transient(« login_attempts_$ip« ) ?: 0;

if ($login_attempts >= 3) {
return new WP_Error(‘too_many_attempts’, ‘Trop de tentatives de connexion. Veuillez réessayer dans 15 minutes.’);
}

if ($user instanceof WP_Error) {
set_transient(« login_attempts_$ip« , $login_attempts + 1, 15 * MINUTE_IN_SECONDS);
} else {
delete_transient(« login_attempts_$ip« );
}

return $user;
}


12. Créer une page automatiquement lors de l’activation du thème

Ce snippet crée une page « Accueil » par défaut si elle n’existe pas déjà.

php

add_action('after_switch_theme', 'create_default_home_page');

function create_default_home_page() {
if (!get_page_by_title(‘Accueil’)) {
wp_insert_post([
‘post_title’ => ‘Accueil’,
‘post_content’ => ‘Bienvenue sur notre site.’,
‘post_status’ => ‘publish’,
‘post_type’ => ‘page’,
]);
}
}


13. Masquer les mises à jour de WordPress pour les non-administrateurs

php
if (!current_user_can('update_core')) {
add_action('init', function() {
remove_action('admin_notices', 'update_nag', 3);
});
}

14. Forcer une connexion HTTPS pour l’administration

php
add_action('admin_init', function() {
if (!is_ssl()) {
wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
exit;
}
});

15. Changer le pied de page de l’administration

php
add_filter('admin_footer_text', function() {
return 'Merci d’utiliser WordPress. Site créé par <a href="https://votre-site.com" target="_blank">Votre Nom</a>.';
});

16. Ajouter une classe CSS personnalisée au menu

Ajoute une classe spécifique à un élément du menu en fonction de sa page.

php
add_filter('nav_menu_css_class', function($classes, $item) {
if ($item->title === 'Accueil') { // Remplacez 'Accueil' par le titre exact de la page
$classes[] = 'menu-item-home';
}
return $classes;
}, 10, 2);

17. Remplacer l’adresse e-mail par défaut de l’expéditeur des emails

php
add_filter('wp_mail_from', function() {
return 'contact@votre-site.com'; // Remplacez par votre adresse e-mail
});
add_filter(‘wp_mail_from_name’, function() {
return ‘Nom de votre site’;
});

18. Désactiver les commentaires sur tout le site

php
add_action('init', function() {
remove_post_type_support('post', 'comments');
remove_post_type_support('page', 'comments');
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);
});

19. Modifier l’URL de connexion (wp-login.php)

Personnalise l’URL pour sécuriser la page de connexion.

php
add_action('init', function() {
if ($_SERVER['REQUEST_URI'] === '/custom-login') {
require_once ABSPATH . 'wp-login.php';
exit;
}
});
add_filter(‘site_url’, function($url, $path) {
if ($path === ‘wp-login.php’) {
return home_url(‘/custom-login’);
}
return $url;
}, 10, 2);

20. Ajouter un shortcode pour afficher l’année actuelle

php
add_shortcode('current_year', function() {
return date('Y');
});
// Utilisation : Ajoutez [current_year] dans vos articles ou pages.

21. Ajouter un script ou un style uniquement sur une page spécifique

Cela permet de charger un fichier CSS ou JS uniquement sur une page donnée.

php
add_action('wp_enqueue_scripts', function() {
if (is_page('contact')) { // Remplacez 'contact' par le slug ou l’ID de la page
wp_enqueue_style('custom-style', get_template_directory_uri() . '/css/custom-style.css');
wp_enqueue_script('custom-script', get_template_directory_uri() . '/js/custom-script.js', [], false, true);
}
});

22. Rediriger les utilisateurs après déconnexion

Vous pouvez rediriger les utilisateurs vers une page spécifique après déconnexion.

php
add_action('wp_logout', function() {
wp_redirect(home_url('/au-revoir/')); // Remplacez '/au-revoir/' par l'URL de votre choix
exit;
});

23. Ajouter une barre de notification en haut du site

Ce snippet ajoute un message en haut de toutes les pages.

php
add_action('wp_head', function() {
echo '<style>
.custom-notification {
background: #ffeb3b;
text-align: center;
padding: 10px;
position: fixed;
top: 0;
width: 100%;
z-index: 9999;
}
</style>'
;
echo '<div class="custom-notification">Bienvenue sur notre site ! Profitez de nos offres spéciales.</div>';
});

24. Limiter le nombre de révisions pour les articles

Cela permet de ne conserver qu’un nombre défini de révisions pour les articles et pages.

php
define('WP_POST_REVISIONS', 3); // Remplacez "3" par le nombre maximum de révisions souhaité.

25. Masquer le logo WordPress dans la barre d’administration

php
add_action('admin_bar_menu', function($wp_admin_bar) {
$wp_admin_bar->remove_node('wp-logo');
}, 999);

26. Activer l’affichage des vignettes dans les flux RSS

php

add_filter('the_excerpt_rss', 'rss_add_featured_image');
add_filter('the_content_feed', 'rss_add_featured_image');

function rss_add_featured_image($content) {
global $post;
if (has_post_thumbnail($post->ID)) {
$content = ‘<p>’ . get_the_post_thumbnail($post->ID, ‘thumbnail’) . ‘</p>’ . $content;
}
return $content;
}


27. Changer le logo sur la page de connexion

Personnalisez l’apparence de la page de connexion avec votre propre logo.

php
add_action('login_enqueue_scripts', function() {
echo '<style>
.login h1 a {
background-image: url('
. get_template_directory_uri() . '/images/custom-logo.png);
background-size: contain;
width: 100%;
height: 80px;
}
</style>'
;
});

28. Ajouter un bouton « Retour en haut » au site

Ajoutez un bouton qui ramène l’utilisateur en haut de la page.

php
add_action('wp_footer', function() {
echo '<a href="#" id="back-to-top" style="position: fixed; bottom: 20px; right: 20px; background: #333; color: #fff; padding: 10px 15px; border-radius: 5px; text-decoration: none;">↑</a>';
echo '<script>
document.getElementById("back-to-top").addEventListener("click", function(e) {
e.preventDefault();
window.scrollTo({ top: 0, behavior: "smooth" });
});
</script>'
;
});

29. Désactiver l’éditeur visuel pour tous les utilisateurs sauf les administrateurs

php
add_filter('user_can_richedit', function($can_edit) {
return current_user_can('administrator') ? $can_edit : false;
});

30. Forcer l’utilisation des permaliens personnalisés

Si vous voulez imposer un format de permalien, utilisez ce code :

php
add_action('init', function() {
if (get_option('permalink_structure') !== '/%postname%/') {
update_option('permalink_structure', '/%postname%/');
flush_rewrite_rules();
}
});

31. Déplacer les scripts en pied de page pour améliorer les performances

Cela garantit que les scripts sont chargés après le contenu pour réduire les temps de chargement.

php
add_action('wp_enqueue_scripts', function() {
global $wp_scripts;
foreach ($wp_scripts->queue as $script) {
if (!is_admin()) {
$wp_scripts->add_data($script, 'group', 1);
}
}
});

32. Forcer les utilisateurs à définir un mot de passe fort

Ajoutez une validation pour obliger les utilisateurs à définir un mot de passe sécurisé lors de l’inscription.

php
add_action('user_profile_update_errors', function($errors, $update, $user) {
if (!$update && !preg_match('/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[W_]).{8,}$/', $user['user_pass'])) {
$errors->add('weak_password', 'Votre mot de passe doit contenir au moins 8 caractères, une majuscule, une minuscule, un chiffre et un caractère spécial.');
}
}, 10, 3);

33. Ajouter un fil d’Ariane sans plugin

Un simple code pour afficher un fil d’Ariane sur votre site.

php
function custom_breadcrumbs() {
if (!is_front_page()) {
echo '<nav class="breadcrumb"><a href="' . home_url() . '">Accueil</a> » ';
if (is_category() || is_single()) {
the_category(', ');
if (is_single()) {
echo ' » ' . get_the_title();
}
} elseif (is_page()) {
echo get_the_title();
}
echo '</nav>';
}
}

Utilisation : Ajoutez <?php custom_breadcrumbs(); ?> où vous souhaitez afficher le fil d’Ariane.


34. Désactiver la fonction de recherche sur le site

Si vous n’avez pas besoin d’une barre de recherche, vous pouvez la désactiver.

php
add_action('init', function() {
if (is_admin()) return;
global $wp_query;
if (isset($wp_query->query_vars['s'])) {
wp_redirect(home_url());
exit;
}
});

35. Activer le téléchargement de types de fichiers non pris en charge

Permet d’ajouter de nouveaux types de fichiers dans la bibliothèque média.

php
add_filter('upload_mimes', function($mimes) {
$mimes['svg'] = 'image/svg+xml';
$mimes['json'] = 'application/json';
return $mimes;
});

36. Empêcher le hotlinking des images

Cela bloque les sites externes qui tentent d’utiliser vos images directement.

php
add_action('init', function() {
if (!empty($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], home_url()) === false) {
header("HTTP/1.1 403 Forbidden");
exit;
}
});

37. Afficher automatiquement les derniers articles dans une page

Ajoute une liste des derniers articles à la fin du contenu de vos pages.

php
add_filter('the_content', function($content) {
if (is_page()) {
$content .= '<h3>Derniers articles :</h3><ul>';
$recent_posts = wp_get_recent_posts(['numberposts' => 5]);
foreach ($recent_posts as $post) {
$content .= '<li><a href="' . get_permalink($post['ID']) . '">' . $post['post_title'] . '</a></li>';
}
$content .= '</ul>';
}
return $content;
});

38. Désactiver les widgets natifs de WordPress

Supprime les widgets standards inutiles du tableau de bord.

php
add_action('wp_dashboard_setup', function() {
remove_meta_box('dashboard_quick_press', 'dashboard', 'side'); // Brouillon rapide
remove_meta_box('dashboard_activity', 'dashboard', 'normal'); // Activité récente
remove_meta_box('dashboard_primary', 'dashboard', 'side'); // Actualités WordPress
});

39. Ajouter des champs personnalisés dans WooCommerce (page produit)

Ajoute un champ personnalisé visible sur la page produit WooCommerce.

php

add_action('woocommerce_product_options_general_product_data', function() {
woocommerce_wp_text_input([
'id' => '_custom_product_field',
'label' => __('Champ personnalisé', 'woocommerce'),
'description' => __('Ajoutez une information personnalisée pour ce produit.', 'woocommerce'),
]);
});

add_action(‘woocommerce_process_product_meta’, function($post_id) {
if (isset($_POST[‘_custom_product_field’])) {
update_post_meta($post_id, ‘_custom_product_field’, sanitize_text_field($_POST[‘_custom_product_field’]));
}
});


40. Programmer l’expiration automatique des articles

Supprime ou passe en brouillon les articles après une certaine date.

php

add_action('wp', function() {
$args = [
'post_type' => 'post',
'meta_query' => [
[
'key' => '_expiration_date',
'value' => current_time('timestamp'),
'compare' => '<',
'type' => 'NUMERIC',
],
],
];
$query = new WP_Query($args);

foreach ($query->posts as $post) {
wp_update_post([‘ID’ => $post->ID, ‘post_status’ => ‘draft’]);
}
});

41. Personnaliser les colonnes dans l’administration pour les articles

Ajoutez une nouvelle colonne dans l’administration pour afficher des métadonnées personnalisées ou d’autres informations.

php

add_filter('manage_post_posts_columns', function($columns) {
$columns['custom_column'] = 'Champ personnalisé';
return $columns;
});

add_action(‘manage_post_posts_custom_column’, function($column, $post_id) {
if ($column === ‘custom_column’) {
echo get_post_meta($post_id, ‘_custom_meta_key’, true) ?: ‘Non défini’;
}
}, 10, 2);


42. Désactiver l’éditeur de blocs Gutenberg

Revenir à l’éditeur classique pour tous les types de contenu.

php
add_filter('use_block_editor_for_post', '__return_false');
add_filter('use_block_editor_for_post_type', '__return_false');

43. Ajouter des classes CSS spécifiques au body

Ajoutez dynamiquement des classes CSS au tag <body> selon des conditions.

php
add_filter('body_class', function($classes) {
if (is_front_page()) {
$classes[] = 'front-page';
}
if (is_singular('post')) {
$classes[] = 'single-post-view';
}
return $classes;
});

44. Créer un shortcode pour afficher des contenus conditionnels

Affichez un contenu spécifique en fonction de l’utilisateur connecté.

php
add_shortcode('conditional_content', function($atts, $content = null) {
if (is_user_logged_in()) {
return '<p>Bienvenue, ' . wp_get_current_user()->display_name . '!</p>' . $content;
}
return '<p>Veuillez vous connecter pour voir ce contenu.</p>';
});

Utilisation :

html
[conditional_content]Contenu réservé aux utilisateurs connectés[/conditional_content]

45. Restreindre l’accès à l’administration à certains rôles

Empêchez les utilisateurs non autorisés d’accéder au tableau de bord.

php
add_action('admin_init', function() {
if (!current_user_can('administrator') && is_admin()) {
wp_redirect(home_url());
exit;
}
});

46. Ajouter une image d’arrière-plan aléatoire

Changez l’image d’arrière-plan du site à chaque chargement de page.

php
add_action('wp_head', function() {
$backgrounds = [
'background1.jpg',
'background2.jpg',
'background3.jpg',
];
$selected_bg = $backgrounds[array_rand($backgrounds)];
echo '<style>body { background-image: url(' . get_template_directory_uri() . '/images/' . $selected_bg . '); }</style>';
});

47. Envoyer un e-mail lors de la publication d’un article

Envoyez une notification à un administrateur lorsque un nouvel article est publié.

php
add_action('publish_post', function($ID, $post) {
$admin_email = get_option('admin_email');
$subject = 'Nouvel article publié : ' . $post->post_title;
$message = 'Un nouvel article a été publié sur votre site : ' . get_permalink($ID);
wp_mail($admin_email, $subject, $message);
}, 10, 2);

48. Désactiver les mises à jour automatiques

Empêchez WordPress de mettre à jour automatiquement les plugins, thèmes ou le noyau.

php
add_filter('automatic_updater_disabled', '__return_true');
add_filter('auto_update_plugin', '__return_false');
add_filter('auto_update_theme', '__return_false');

49. Afficher les articles d’un auteur spécifique

Un shortcode pour afficher une liste des articles d’un auteur.

php

add_shortcode('author_posts', function($atts) {
$atts = shortcode_atts(['author' => '', 'count' => 5], $atts);
$query = new WP_Query([
'author_name' => $atts['author'],
'posts_per_page' => $atts['count'],
]);

if ($query->have_posts()) {
$output = ‘<ul>’;
while ($query->have_posts()) {
$query->the_post();
$output .= ‘<li><a href= »‘ . get_permalink() . ‘ »>’ . get_the_title() . ‘</a></li>’;
}
$output .= ‘</ul>’;
wp_reset_postdata();
return $output;
}
return ‘Aucun article trouvé.’;
});

Utilisation :

html
[author_posts author="nom-auteur" count="10"]

50. Augmenter la sécurité des fichiers .htaccess

Ajoutez cette règle pour empêcher l’accès direct aux fichiers sensibles via le code PHP.

php

add_action('init', function() {
$htaccess_rules = <<<HTACCESS
# Bloque l'accès aux fichiers sensibles
<FilesMatch ".(htaccess|htpasswd|php|ini|log|sh|bak)$">
Order Allow,Deny
Deny from all
</FilesMatch>
HTACCESS
;

$htaccess_file = ABSPATH . ‘.htaccess’;
if (file_exists($htaccess_file) && is_writable($htaccess_file)) {
file_put_contents($htaccess_file, $htaccess_rules, FILE_APPEND | LOCK_EX);
}
});

51. Ajouter une image par défaut pour les articles sans vignette

Ce snippet attribue une image par défaut si un article n’a pas de vignette définie.

php
add_filter('post_thumbnail_html', function($html, $post_id, $post_thumbnail_id, $size, $attr) {
if (empty($html)) {
$default_image = get_template_directory_uri() . '/images/default-thumbnail.jpg';
$html = '<img src="' . $default_image . '" alt="Image par défaut">';
}
return $html;
}, 10, 5);

52. Afficher le nombre total d’articles publiés sur le site

Ajoutez un shortcode pour afficher le total des articles publiés.

php
add_shortcode('total_posts', function() {
$count_posts = wp_count_posts();
return $count_posts->publish;
});

Utilisation :

html
[total_posts]

53. Ajouter un widget personnalisé dans la sidebar

Créez un widget pour afficher un message ou du contenu personnalisé dans une barre latérale.

php
add_action('widgets_init', function() {
register_sidebar([
'name' => 'Sidebar personnalisée',
'id' => 'custom_sidebar',
'before_widget' => '<div class="widget-custom">',
'after_widget' => '</div>',
'before_title' => '<h3>',
'after_title' => '</h3>',
]);
});

Ensuite, placez ce code dans le fichier sidebar.php de votre thème :

php
if (is_active_sidebar('custom_sidebar')) {
dynamic_sidebar('custom_sidebar');
}

54. Désactiver l’éditeur de fichiers dans le tableau de bord

Empêche la modification des fichiers de thèmes ou plugins depuis l’administration WordPress.

php
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true);

55. Ajouter des classes CSS spécifiques à chaque catégorie

Ajoutez des classes aux articles en fonction des catégories auxquelles ils appartiennent.

php
add_filter('post_class', function($classes, $class, $post_id) {
$categories = get_the_category($post_id);
if (!empty($categories)) {
foreach ($categories as $category) {
$classes[] = 'category-' . $category->slug;
}
}
return $classes;
}, 10, 3);

56. Personnaliser le message « Article non trouvé »

Modifiez le texte affiché lorsqu’aucun contenu n’est disponible.

php
add_filter('gettext', function($translation, $text, $domain) {
if ($text === 'Sorry, no posts matched your criteria.') {
$translation = 'Aucun article trouvé pour le moment. Revenez bientôt !';
}
return $translation;
}, 10, 3);

57. Créer une redirection simple après connexion

Redirigez les utilisateurs vers une page spécifique après connexion.

php
add_filter('login_redirect', function($redirect_to, $request, $user) {
if (isset($user->roles) && is_array($user->roles)) {
if (in_array('administrator', $user->roles)) {
return admin_url();
} else {
return home_url('/mon-compte/');
}
}
return $redirect_to;
}, 10, 3);

58. Désactiver les commentaires sur tout le site

Supprime les commentaires pour tous les types de contenu.

php
add_action('init', function() {
remove_post_type_support('post', 'comments');
remove_post_type_support('page', 'comments');
add_filter('comments_open', '__return_false');
add_filter('pings_open', '__return_false');
}, 100);

59. Limiter le nombre de mots dans les extraits (excerpts)

Réduisez la longueur des extraits affichés pour vos articles.

php
add_filter('excerpt_length', function($length) {
return 20; // Remplacez "20" par le nombre de mots souhaité
});
add_filter('excerpt_more', function() {
return '... <a href="' . get_permalink() . '">Lire la suite</a>';
});

60. Créer un formulaire simple avec un shortcode

Ajoutez un formulaire de contact de base avec un shortcode.

php

add_shortcode('simple_form', function() {
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['simple_form'])) {
$name = sanitize_text_field($_POST['name']);
$email = sanitize_email($_POST['email']);
$message = sanitize_textarea_field($_POST['message']);

wp_mail(get_option(‘admin_email’), ‘Nouveau message de ‘ . $name, $message, [‘From: ‘ . $email]);

return ‘<p>Merci pour votre message ! Nous reviendrons vers vous rapidement.</p>’;
}
return ‘<form method= »post »>
<p><label>Nom : <input type= »text » name= »name » required></label></p>
<p><label>Email : <input type= »email » name= »email » required></label></p>
<p><label>Message : <textarea name= »message » required></textarea></label></p>
<p><button type= »submit » name= »simple_form »>Envoyer</button></p>
</form>’
;
});

Utilisation :

html
[simple_form]

61. Ajouter un message de maintenance au site

Affichez une page ou un message de maintenance aux visiteurs non connectés.

php
add_action('template_redirect', function() {
if (!current_user_can('administrator') && !is_user_logged_in()) {
wp_die(
'<h1>Site en maintenance</h1><p>Nous effectuons actuellement des travaux. Merci de revenir plus tard.</p>',
'Maintenance'
);
}
});

62. Créer un menu personnalisé via un shortcode

Générez un menu WordPress dans un emplacement spécifique avec un shortcode.

php
add_shortcode('custom_menu', function($atts) {
$atts = shortcode_atts(['menu' => ''], $atts);
return wp_nav_menu([
'menu' => $atts['menu'],
'container' => false,
'echo' => false,
]);
});

Utilisation :

html
[custom_menu menu="nom-du-menu"]

63. Afficher des champs personnalisés dans les résultats de recherche

Incluez des champs ACF ou personnalisés dans les recherches WordPress.

php

add_filter('posts_search', function($search, $wp_query) {
global $wpdb;
if (!empty($search) && !is_admin()) {
$search = str_replace('))', ") OR ({$wpdb->postmeta}.meta_value LIKE '%" . esc_sql($wp_query->query_vars['s']) . "%'))", $search);
$search = str_replace('(((', "(($wpdb->posts.post_title LIKE '%" . esc_sql($wp_query->query_vars['s']) . "%') OR ({$wpdb->postmeta}.meta_value LIKE '%" . esc_sql($wp_query->query_vars['s']) . "%'))", $search);
}
return $search;
}, 10, 2);

add_filter(‘posts_join’, function($join) {
global $wpdb;
return $join .  » LEFT JOIN $wpdb->postmeta ON {$wpdb->posts}.ID = {$wpdb->postmeta}.post_id « ;
});

add_filter(‘posts_distinct’, function($distinct) {
return « DISTINCT »;
});


64. Redimensionner automatiquement les images téléchargées

Fixez une limite de largeur et hauteur pour les nouvelles images téléchargées.

php

add_filter('wp_handle_upload_prefilter', function($file) {
$image = getimagesize($file['tmp_name']);
$max_width = 1200;
$max_height = 1200;

if ($image[0] > $max_width || $image[1] > $max_height) {
$file[‘error’] = ‘L’image est trop grande. La taille maximale autorisée est de ‘ . $max_width . ‘x’ . $max_height . ‘ pixels.’;
}
return $file;
});


65. Changer le logo de connexion WordPress

Personnalisez le logo affiché sur la page de connexion.

php

add_action('login_enqueue_scripts', function() {
echo '<style>
.login h1 a {
background-image: url('
. get_stylesheet_directory_uri() . '/images/custom-logo.png);
width: 300px;
background-size: contain;
height: 80px;
}
</style>'
;
});

add_filter(‘login_headerurl’, function() {
return home_url();
});

add_filter(‘login_headertext’, function() {
return ‘Retour à l’accueil’;
});


66. Définir un champ obligatoire dans WooCommerce

Ajoutez une validation obligatoire sur un champ personnalisé du formulaire de commande WooCommerce.

php

add_action('woocommerce_checkout_process', function() {
if (!$_POST['custom_field']) {
wc_add_notice(__('Veuillez remplir le champ personnalisé.'), 'error');
}
});

add_action(‘woocommerce_checkout_update_order_meta’, function($order_id) {
if ($_POST[‘custom_field’]) {
update_post_meta($order_id, ‘custom_field’, sanitize_text_field($_POST[‘custom_field’]));
}
});


67. Désactiver l’utilisation d’un mot spécifique dans les titres d’articles

Bloquez certains mots dans les titres de vos articles.

php
add_filter('wp_insert_post_data', function($data, $postarr) {
$banned_words = ['interdit', 'prohibé', 'mauvais'];
foreach ($banned_words as $word) {
if (stripos($data['post_title'], $word) !== false) {
wp_die('Votre titre contient un mot interdit : ' . $word);
}
}
return $data;
}, 10, 2);

68. Afficher automatiquement des articles similaires sous chaque article

Affichez une liste d’articles liés en fonction des catégories.

php
add_filter('the_content', function($content) {
if (is_single()) {
$categories = wp_get_post_categories(get_the_ID());
$related_posts = get_posts(['category__in' => $categories, 'numberposts' => 5, 'post__not_in' => [get_the_ID()]]);
if ($related_posts) {
$content .= '<h3>Articles similaires :</h3><ul>';
foreach ($related_posts as $post) {
$content .= '<li><a href="' . get_permalink($post->ID) . '">' . $post->post_title . '</a></li>';
}
$content .= '</ul>';
}
}
return $content;
});

69. Ajouter automatiquement un lien de partage social sous chaque article

Ajoutez des boutons de partage pour les réseaux sociaux.

php
add_filter('the_content', function($content) {
if (is_single()) {
$url = urlencode(get_permalink());
$title = urlencode(get_the_title());
$buttons = '
<div class="social-share">
<a href="https://twitter.com/share?url='
. $url . '&text=' . $title . '" target="_blank">Partager sur Twitter</a>
<a href="https://www.facebook.com/sharer.php?u='
. $url . '" target="_blank">Partager sur Facebook</a>
<a href="https://www.linkedin.com/shareArticle?url='
. $url . '&title=' . $title . '" target="_blank">Partager sur LinkedIn</a>
</div>'
;
$content .= $buttons;
}
return $content;
});

70. Créer une barre de progression de lecture dynamique

Ajoutez une barre indiquant la progression de lecture d’un article.

php
add_action('wp_footer', function() {
if (is_single()) {
echo '<div id="reading-progress-bar" style="position:fixed;top:0;left:0;height:5px;background:#000;width:0%;z-index:9999;"></div>';
echo '<script>
window.addEventListener("scroll", function() {
const scrollTop = window.pageYOffset;
const docHeight = document.documentElement.scrollHeight - window.innerHeight;
const progress = (scrollTop / docHeight) * 100;
document.getElementById("reading-progress-bar").style.width = progress + "%";
});
</script>'
;
}
});

71. Ajouter une classe au lien actuel du menu

Ajoutez une classe personnalisée au lien actif dans un menu WordPress.

php
add_filter('nav_menu_css_class', function($classes, $item) {
if (in_array('current-menu-item', $classes)) {
$classes[] = 'menu-item-active';
}
return $classes;
}, 10, 2);

72. Restreindre l’accès au tableau de bord aux administrateurs uniquement

Empêchez les utilisateurs non administrateurs d’accéder au tableau de bord.

php
add_action('admin_init', function() {
if (!current_user_can('administrator') && !wp_doing_ajax()) {
wp_redirect(home_url());
exit;
}
});

73. Créer un champ ACF obligatoire

Assurez-vous qu’un champ ACF (Advanced Custom Fields) spécifique soit rempli avant de publier un contenu.

php
add_action('acf/validate_save_post', function() {
if (get_field('nom_du_champ_acf') === '') {
acf_add_validation_error('nom_du_champ_acf', 'Ce champ est obligatoire.');
}
});

74. Afficher le temps estimé de lecture d’un article

Ajoutez une estimation du temps de lecture au début de chaque article.

php
add_filter('the_content', function($content) {
if (is_single()) {
$word_count = str_word_count(strip_tags(get_post_field('post_content', get_the_ID())));
$reading_time = ceil($word_count / 200); // 200 mots par minute
$content = '<p>Temps de lecture estimé : ' . $reading_time . ' minute(s).</p>' . $content;
}
return $content;
});

75. Ajouter un champ personnalisé dans le formulaire d’inscription WordPress

Permettez aux utilisateurs d’ajouter des informations supplémentaires lors de l’inscription.

php

add_action('register_form', function() {
?>
<p>
<label for="phone">Numéro de téléphone<br>
<input type="text" name="phone" id="phone" class="input" value="<?php echo esc_attr($_POST['phone'] ?? ''); ?>"></label>
</p>
<?php
});

add_action(‘user_register‘, function($user_id) {
if (isset($_POST[‘phone’])) {
update_user_meta($user_id, ‘phone’, sanitize_text_field($_POST[‘phone’]));
}
});


76. Empêcher le hotlinking des images

Bloquez les sites externes qui tentent d’utiliser directement vos images via le hotlinking.
Ajoutez ceci au fichier .htaccess :

ruby
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^https://(www.)?votre-site.com/ [NC]
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .(jpg|jpeg|png|gif)$ - [F,NC]

77. Envoyer un e-mail automatique après publication d’un article

Envoyez un e-mail à un administrateur lorsqu’un nouvel article est publié.

php
add_action('publish_post', function($post_ID) {
$post = get_post($post_ID);
$author = get_userdata($post->post_author);
$subject = 'Nouvel article publié : ' . $post->post_title;
$message = 'Bonjour,' . "rnrn" . 'Un nouvel article a été publié sur votre site.' . "rn" . 'Titre : ' . $post->post_title . "rn" . 'Auteur : ' . $author->display_name . "rn" . 'Lien : ' . get_permalink($post_ID);
wp_mail(get_option('admin_email'), $subject, $message);
});

78. Afficher une bannière d’alerte personnalisée

Ajoutez une bannière d’information en haut du site.

php
add_action('wp_head', function() {
echo '<style>
.custom-banner {
background: #ffcc00;
color: #000;
padding: 10px;
text-align: center;
font-size: 16px;
position: fixed;
width: 100%;
top: 0;
z-index: 9999;
}
body { margin-top: 50px; }
</style>'
;
echo '<div class="custom-banner">🚧 Attention : Maintenance prévue ce week-end !</div>';
});

79. Désactiver les révisions pour optimiser la base de données

Limitez ou désactivez les révisions d’articles.

php
define('WP_POST_REVISIONS', 5); // Limite à 5 révisions
// Pour désactiver complètement :
define('WP_POST_REVISIONS', false);

80. Restreindre l’upload à certains types de fichiers

Permettez uniquement certains formats de fichiers dans les uploads.

php
add_filter('upload_mimes', function($mimes) {
return [
'jpg|jpeg|png' => 'image/jpeg',
'pdf' => 'application/pdf',
];
});

81. Désactiver l’accès aux flux RSS

Empêchez l’accès aux flux RSS si vous n’en avez pas besoin.

php
add_action('do_feed', function() {
wp_die('Les flux RSS sont désactivés sur ce site.');
}, 1);
add_action('do_feed_rdf', '__return_false', 1);
add_action('do_feed_rss', '__return_false', 1);
add_action('do_feed_rss2', '__return_false', 1);
add_action('do_feed_atom', '__return_false', 1);

82. Rediriger les utilisateurs après une déconnexion

Redirigez vers une page personnalisée après une déconnexion.

php
add_action('wp_logout', function() {
wp_redirect(home_url('/au-revoir/'));
exit;
});

83. Afficher la date de dernière mise à jour d’un article

Ajoutez la date de dernière modification à la fin de vos articles.

php
add_filter('the_content', function($content) {
if (is_single() && get_the_modified_time() !== get_the_time()) {
$content .= '<p>Dernière mise à jour le : ' . get_the_modified_date() . '</p>';
}
return $content;
});

84. Forcer les utilisateurs à définir une image à la une

Empêchez la publication d’un article sans image à la une.

php
add_action('save_post', function($post_id) {
if (get_post_type($post_id) === 'post' && !has_post_thumbnail($post_id)) {
remove_action('save_post', __FUNCTION__);
wp_update_post(['ID' => $post_id, 'post_status' => 'draft']);
add_action('save_post', __FUNCTION__);
wp_die('Veuillez ajouter une image à la une avant de publier cet article.');
}
});

85. Ajouter un message de bienvenue personnalisé pour les utilisateurs connectés

Affichez un message pour les utilisateurs connectés en haut du site.

php
add_action('wp_head', function() {
if (is_user_logged_in()) {
$user = wp_get_current_user();
echo '<div class="welcome-message" style="background: #f4f4f4; padding: 10px; text-align: center;">';
echo 'Bonjour, ' . esc_html($user->display_name) . '! Bienvenue sur le site.';
echo '</div>';
}
});

86. Ajouter un champ de recherche dans les menus WordPress

Ajoutez un champ de recherche directement dans le menu principal.

php
add_filter('wp_nav_menu_items', function($items, $args) {
if ($args->theme_location === 'primary') {
$items .= '<li class="menu-item search-item">
<form role="search" method="get" class="search-form" action="'
. home_url('/') . '">
<input type="search" class="search-field" placeholder="Rechercher…" value="" name="s" />
<button type="submit" class="search-submit">🔍</button>
</form>
</li>'
;
}
return $items;
}, 10, 2);

87. Restreindre l’accès à des pages en fonction du rôle utilisateur

Bloquez l’accès à certaines pages pour des utilisateurs non autorisés.

php
add_action('template_redirect', function() {
if (is_page('page-restreinte') && !current_user_can('editor')) {
wp_redirect(home_url('/'));
exit;
}
});

88. Créer un type de post personnalisé

Ajoutez un nouveau type de contenu pour votre site.

php
add_action('init', function() {
register_post_type('portfolio', [
'label' => 'Portfolios',
'public' => true,
'supports' => ['title', 'editor', 'thumbnail'],
'has_archive' => true,
'rewrite' => ['slug' => 'portfolios'],
'menu_icon' => 'dashicons-portfolio',
]);
});

89. Supprimer des éléments du tableau de bord pour certains rôles

Cachez certains widgets du tableau de bord WordPress.

php
add_action('wp_dashboard_setup', function() {
if (!current_user_can('administrator')) {
remove_meta_box('dashboard_activity', 'dashboard', 'normal');
remove_meta_box('dashboard_quick_press', 'dashboard', 'side');
remove_meta_box('dashboard_primary', 'dashboard', 'side');
}
});

90. Modifier l’ordre des articles dans l’administration

Affichez les articles les plus récents en premier dans l’administration.

php
add_action('pre_get_posts', function($query) {
if (is_admin() && $query->get('post_type') === 'post') {
$query->set('orderby', 'date');
$query->set('order', 'DESC');
}
});

91. Ajouter des liens de navigation entre les articles

Ajoutez des boutons pour naviguer entre les articles.

php
add_filter('the_content', function($content) {
if (is_single()) {
$content .= '<div class="post-navigation">';
$content .= get_previous_post_link('<span class="prev-post">Article précédent : %link</span>');
$content .= get_next_post_link('<span class="next-post">Article suivant : %link</span>');
$content .= '</div>';
}
return $content;
});

92. Personnaliser l’e-mail de réinitialisation de mot de passe

Modifiez le contenu de l’e-mail envoyé pour réinitialiser un mot de passe.

php
add_filter('retrieve_password_message', function($message, $key, $user_login, $user_data) {
$message = "Bonjour " . $user_data->display_name . ",nn";
$message .= "Vous avez demandé à réinitialiser votre mot de passe. Cliquez sur le lien ci-dessous :nn";
$message .= wp_login_url() . "?action=rp&key=$key&login=" . urlencode($user_login) . "nn";
$message .= "Si vous n’avez pas fait cette demande, veuillez ignorer cet e-mail.";
return $message;
}, 10, 4);

93. Supprimer les commentaires des types de contenu spécifiques

Désactivez les commentaires pour des types de contenu définis.

php
add_action('init', function() {
remove_post_type_support('page', 'comments');
remove_post_type_support('post', 'comments');
});

94. Changer l’URL de connexion WordPress

Renommez l’URL de connexion pour améliorer la sécurité.
Utilisez un plugin comme WPS Hide Login, ou appliquez un filtre avec un système de réécriture. Notez qu’un changement manuel peut être complexe à gérer et risqué.


95. Empêcher les utilisateurs de modifier certains réglages

Verrouillez les options pour éviter les changements par erreur.

php
add_action('admin_init', function() {
if (!current_user_can('administrator')) {
remove_menu_page('options-general.php');
}
});

96. Afficher des messages différents en fonction de la date

Ajoutez un message personnalisé selon la période de l’année.

php
add_action('wp_footer', function() {
$current_month = date('n'); // Mois actuel (1-12)
if ($current_month === '12') {
echo '<div class="footer-message">🎄 Joyeuses Fêtes ! Merci de votre visite.</div>';
} elseif ($current_month >= 6 && $current_month <= 8) {
echo '<div class="footer-message">☀️ Profitez de l’été avec nous !</div>';
}
});

97. Limiter le nombre de mots dans les extraits automatiques

Réduisez la longueur des extraits dans WordPress.

php
add_filter('excerpt_length', function($length) {
return 20; // Remplacez par le nombre de mots souhaité
}, 999);

98. Ajouter un message personnalisé après l’inscription

Affichez un message personnalisé lorsqu’un utilisateur s’inscrit avec succès.

php
add_action('user_register', function($user_id) {
$user = get_userdata($user_id);
wp_mail($user->user_email, 'Bienvenue sur notre site !', 'Merci de vous être inscrit. Nous espérons que vous aimerez notre contenu !');
});

99. Supprimer le logo WordPress de la barre d’administration

Nettoyez la barre d’administration en supprimant le logo WordPress.

php
add_action('admin_bar_menu', function($wp_admin_bar) {
$wp_admin_bar->remove_node('wp-logo');
}, 999);

100. Empêcher la navigation dans les fichiers du serveur

Bloquez l’accès direct aux dossiers sur le serveur en ajoutant une règle dans .htaccess :

mathematica
Options -Indexes

 

Snippets WordPress : pour conclure

Les snippets WordPress sont des outils puissants et pratiques pour personnaliser et étendre les fonctionnalités d’un site. Toutefois, l’idée n’est pas de les utiliser tous indiscriminément, mais plutôt de choisir judicieusement ceux qui sont les plus pertinents et adaptés aux besoins spécifiques du projet. Chaque site a des exigences uniques, et il est essentiel de sélectionner les snippets qui apporteront une réelle valeur ajoutée tout en maintenant une performance optimale. Une approche ciblée et réfléchie permettra de tirer le meilleur parti de WordPress tout en évitant la surcharge de code inutile ou les conflits potentiels. Ainsi, les snippets doivent être utilisés avec discernement pour améliorer l’expérience utilisateur et répondre aux objectifs du site, sans compromettre sa stabilité ou sa sécurité.

5/5 - (1 avis)

Hello, je suis Alexis Catanas.J’accompagne entreprises et organisations dans leurs projets numériques depuis plus de 13 ans.Mon parcours est marqué par une double expertise : développement de sites web et conseil stratégique, acquise en travaillant à la fois en agence web comme chef de projet et en tant que consultant digital en immersion chez mes clients.En 2013, j’ai co-fondé Refence, un collectif réunissant des experts freelances en développement web, référencement (SEO/SEA), marketing digital, webdesign, et community management.