functions.php — Thème Hello Elementor
Le fichier functions.php du thème Hello Elementor concentre les personnalisations WordPress du site maloc-ead : gestion du CPT Formulaire, contrôle d'accès, filtres admin, import d'utilisateurs, validation de fichiers et messages d'erreur personnalisés.
1. Styles
add_action('wp_enqueue_scripts', 'wpm_enqueue_styles');
Charge la feuille de style principale du thème hello-elementor (style.css).
2. CPT Formulaire — colonnes et tri
Colonnes personnalisées
Deux colonnes sont ajoutées à la liste du CPT formulaire dans l'administration :
| Colonne | Champ ACF | Contenu affiché |
|---|---|---|
| Nom | nom + prenom | Lien vers l'édition du post |
| Garage | garage | Nom d'affichage de l'utilisateur associé |
Colonnes triables
Les colonnes Nom et Garage sont déclarées triables (manage_edit-formulaire_sortable_columns).
3. Filtrage par garage
Filtre automatique pour le rôle garage
add_action('pre_get_posts', 'form_garage_filter');
Lorsqu'un utilisateur avec le rôle garage consulte la liste des formulaires en administration, la requête est automatiquement filtrée pour n'afficher que les formulaires rattachés à ce garage (via le champ ACF garage = ID de l'utilisateur courant).
Filtre manuel (select dans la toolbar)
Un <select> est ajouté à la barre de filtres (restrict_manage_posts) permettant à l'administrateur de filtrer par garage. La valeur sélectionnée est appliquée via pre_get_posts (my_acf_filter_query).
4. Restriction d'accès au formulaire
add_action('template_redirect', 'restrict_page_to_logged_in_users');
Logique d'accès à la page formulaire :
flowchart TD
A[Accès à /formulaire] --> B{Utilisateur connecté ?}
B -- Non --> C[Accès autorisé sans redirection]
B -- Oui --> D{Rôle admin ou garage ?}
D -- Oui --> E[Accès autorisé]
D -- Non --> F{stripe_customer_id défini ?}
F -- Non --> G[Redirection vers Mon compte WooCommerce]
F -- Oui --> H{Plugin malocead actif ?}
H -- Non --> I[Redirection vers l'accueil]
H -- Oui --> J[Accès autorisé]
Le bloc de redirection pour les visiteurs non connectés est actuellement commenté (ligne désactivée dans le code).
Message de connexion requis
Si le paramètre ?login_required=true est présent dans l'URL, un bandeau jaune est affiché en haut de page :
Vous devez vous connecter ou créer un compte pour accéder au formulaire.
5. Import d'utilisateurs (JSON)
function importusers($csv) { ... }
add_action('admin_init', function() { ... });
Déclenché par ?import_users=true dans l'URL d'administration.
- Lit un fichier
import.jsonplacé à la racine du thème - Pour chaque entrée
{ "mail": "...", "nom": "..." }:- Retrouve l'utilisateur WordPress par son email
- Met à jour ses métadonnées
nicknameetname
6. Menus back-office masqués pour les garages
add_action('admin_menu', 'remove_menus_for_specific_role', 999);
Les utilisateurs avec le rôle garage ne voient pas les menus suivants :
| Menu masqué |
|---|
| Tableau de bord |
| Articles |
| Elementor Library |
| Commentaires |
| Envato Elements |
| Outils |
| Réglages |
| Éditeur de thème |
7. Désactivation des emails de mise à jour automatique
add_filter('auto_theme_update_send_email', '__return_false');
add_filter('auto_plugin_update_send_email', '__return_false');
add_filter('auto_core_update_send_email', '__return_false');
Supprime les notifications email WordPress envoyées lors des mises à jour automatiques (thèmes, plugins, core).
8. Message d'erreur personnalisé (Elementor)
add_action('wp_footer', function() { ... });
Le message d'erreur natif d'Elementor (.elementor-message-danger) est masqué via CSS et remplacé par un message personnalisé :
Une erreur s'est produite ! Merci de réessayer ou contactez nous
Ce message est affiché via un MutationObserver qui détecte l'ajout du nœud d'erreur Elementor dans le DOM.
Il se masque dès que l'utilisateur modifie un champ du formulaire.
9. Validation des fichiers (côté client, thème)
Un second bloc de validation fichiers est intégré dans functions.php (en complément de celui du plugin Formulaire Logger) :
- Formats autorisés :
jpg,jpeg,png,pdf,doc,docx,odt,tiff - Taille maximale : lue depuis
data-max-sizesur le conteneur Elementor (défaut 50 MB) - En cas de fichier invalide : alerte, réinitialisation du champ, désactivation des boutons Suivant et Soumettre
Ce bloc est fonctionnellement identique à celui du plugin Formulaire Logger. Les deux coexistent pour assurer la validation même si le plugin est désactivé.