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
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é
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
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
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)
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
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
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é
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
add_filter('xmlrpc_enabled', '__return_false');
10. Ajouter un champ personnalisé dans le profil utilisateur
function custom_user_profile_fields($user) {add_action('show_user_profile', 'custom_user_profile_fields');
add_action('edit_user_profile', 'custom_user_profile_fields');
?>
<h3>Informations supplémentaires</h3>
<table class= »form–table« >
<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= »regular–text » /><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é.
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à.
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
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
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
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.
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
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
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.
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
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.
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.
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.
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.
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
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
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.
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.
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
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 :
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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é.
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 :
[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.
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.
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é.
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.
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.
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 :
[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.
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.
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.
add_shortcode('total_posts', function() {
$count_posts = wp_count_posts();
return $count_posts->publish;
});
Utilisation :
[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.
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 :
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.
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.
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.
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.
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.
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.
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.
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 :
[simple_form]
61. Ajouter un message de maintenance au site
Affichez une page ou un message de maintenance aux visiteurs non connectés.
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.
add_shortcode('custom_menu', function($atts) {
$atts = shortcode_atts(['menu' => ''], $atts);
return wp_nav_menu([
'menu' => $atts['menu'],
'container' => false,
'echo' => false,
]);
});
Utilisation :
[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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
:
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é.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
:
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é.