
📝 WP-Recall : configurer la publication d'articles privés par les utilisateurs
Des utilisateurs ont rempli un formulaire dans leur compte personnel, cliqué sur «Envoyer», et la demande s’est retrouvée dans le flux public du site. Avec le numéro de téléphone, l’adresse et les données du passeport.
Cela se produit lorsqu’un type de publication personnalisé est configuré comme public. WordPress affiche par défaut tout ce qui est créé avec 'public' => true, que cela ait été publié par un administrateur ou par un visiteur via un formulaire frontend dans WP-Recall.
Voici un guide étape par étape: nous allons créer un type de publication personnalisé, lui attribuer un statut privé lors de la publication et configurer une redirection vers le compte utilisateur. Sans plugins tout-en-un coûteux: WP-Recall, MB Custom Post Type et trois fonctions dans functions.php.
💡 Aperçu rapide:
- Installez WP-Recall et MB Custom Post Type, deux plugins gratuits du catalogue WordPress.org.
- Créez un type de publication personnalisé via l’interface de MB Custom Post Type, sans écrire une seule ligne de code.
- Ajoutez trois fonctions dans
functions.php: enregistrement du CPT en code (optionnel), redirection après publication et passage automatique au statutprivate. - Vérifiez: l’utilisateur publie une demande depuis son compte personnel, elle n’est visible que par les administrateurs et les éditeurs.
Étape 1: Installer WP-Recall et MB Custom Post Type
Vous aurez besoin de deux plugins. Tous deux sont gratuits et disponibles dans le catalogue officiel WordPress.org.
WP-Recall crée un compte personnel utilisateur: inscription, profil, messages privés et, ce qui est important pour notre objectif, la publication d’articles depuis le frontend. L’utilisateur se connecte à son compte, remplit le formulaire et soumet la demande. Pas de panneau d’administration, tout se passe sur les pages du site.
MB Custom Post Types & Custom Taxonomies, une extension du plugin Meta Box. Fournit une interface visuelle pour créer des types de publication et des taxonomies personnalisés. Au moment où nous écrivons ces lignes, le plugin compte plus de 10 000 installations actives et une note de 4,7 sur WordPress.org. Il est mis à jour régulièrement, la dernière version est sortie en juin 2026.
Les deux plugins s’installent de manière standard: Extensions → Ajouter, recherchez par nom, «Installer» → «Activer».
Étape 2: Créer un type de publication personnalisé via l’interface de MB Custom Post Type
Après avoir activé le plugin, un menu Meta Box → Types de publication apparaît dans le panneau d’administration. Cliquez sur «Ajouter» et remplissez les champs:

Principaux paramètres à configurer tout de suite:
- Identifiant du type de publication, nom système en latin, par exemple
claimouuser_request. Ce slug apparaîtra dans les URL et le code. - Libellés, le plugin remplira automatiquement les libellés en français si vous saisissez le nom en français dans le champ Nom au singulier. Modifiez manuellement ce qui ne vous convient pas.
- Fonctionnalités, cochez
title,editoretcustom-fields. La vignette et les commentaires ne sont généralement pas nécessaires pour des demandes. - Exclure de la recherche, activez. Les publications des utilisateurs ne doivent pas être indexées.
- Public,
true(le formulaire WP-Recall a besoin de voir le type de publication). Nous gérerons la confidentialité avec du code à l’étape 4.
Cliquez sur «Enregistrer», le type de publication personnalisé est enregistré. Le même résultat peut être obtenu avec du code (une alternative pour ceux qui préfèrent functions.php):
1 function sdstudio_register_private_cpt() { 2 $args = array( 3 'label' => 'Applications', 4 'public' => true, 5 'exclude_from_search' => true, 6 'publicly_queryable' => true, 7 'show_ui' => true, 8 'show_in_rest' => false, 9 'menu_icon' => 'dashicons-lock', 10 'capability_type' => 'post', 11 'hierarchical' => false, 12 'has_archive' => false, 13 'supports' => array( 'title', 'editor', 'author', 'custom-fields' ), 14 'rewrite' => array( 'slug' => 'claims' ), 15 ); 16 17 register_post_type( 'user_claim', $args ); 18 } 19 add_action( 'init', 'sdstudio_register_private_cpt' );
Ajoutez ce code au functions.php de votre thème enfant ou via le plugin Code Snippets. Après l’enregistrement, allez dans le panneau d’administration, une section «Demandes» apparaîtra dans la barre latérale.
Étape 3: Configurer la redirection après publication
Par défaut, WP-Recall montre à l’utilisateur l’article lui-même après la soumission. Pour des demandes, cela n’a aucun intérêt, la personne a besoin de son compte personnel, pas d’une page avec le formulaire qu’elle vient de soumettre.
La fonction ci-dessous intercepte le hook update_post_rcl (événement WP-Recall après publication) et redirige l’utilisateur vers sa section de demandes:
1 /** 2 * Redirect to personal account after publishing a post via WP-Recall. 3 * Add to functions.php of the child theme. 4 */ 5 function sdstudio_redirect_after_rcl_publish() { 6 $user_id = get_current_user_id(); 7 wp_redirect( '/account/?user=' . $user_id . '&tab=publics' ); 8 exit; 9 } 10 add_action( 'update_post_rcl', 'sdstudio_redirect_after_rcl_publish' );
Ici, get_current_user_id() est appelé à l’intérieur de la fonction, contrairement au schéma courant avec une variable à l’extérieur, ce qui est fiable quel que soit l’ordre de chargement des fichiers. Remplacez le chemin /account/ par l’URL de votre compte personnel dans votre installation WP-Recall.
Vérifiez: connectez-vous en tant qu’utilisateur test, publiez un article depuis le compte, le navigateur doit revenir à la page avec la liste des demandes.
Étape 4: Rendre automatiquement la publication privée
C’est l’étape clé. Même si le type de publication personnalisé est masqué de la recherche, l’article lui-même avec post_status = 'publish' est accessible via un lien direct. Et il existe suffisamment de moyens de trouver ce lien: des flux RSS à l’API REST wp-json.
Le hook transition_post_status se déclenche à chaque changement de statut d’une publication. Nous interceptons le moment où le statut passe à publish et le forçons à private:
1 /** 2 * Automatically makes a post private upon publication. 3 * Checks that it is our custom post type — user_claim. 4 * Source: https://stackoverflow.com/questions/54508808/ 5 */ 6 function sdstudio_force_private_status( $new_status, $old_status, $post ) { 7 if ( 'user_claim' === $post->post_type 8 && 'publish' === $new_status 9 && $old_status !== $new_status ) { 10 $post->post_status = 'private'; 11 wp_update_post( $post ); 12 } 13 } 14 add_action( 'transition_post_status', 'sdstudio_force_private_status', 10, 3 );

Voici ce qui se passe ici ligne par ligne:
transition_post_status, un hook WordPress qui est appelé à chaque transition d’une publication d’un statut à un autre.- La première condition vérifie
post_typepour éviter d’affecter les articles et pages ordinaires. - La deuxième condition intercepte le moment de la publication (
publish), pas de la dépublication. - La troisième condition (
$old_status !== $new_status) empêche un déclenchement répété lorsquewp_update_postappelle lui-même ce même hook.
Assurez-vous de remplacer 'user_claim' par l’identifiant de votre type de publication personnalisé. Si vous n’êtes pas sûr de l’identifiant, vérifiez-le dans la barre d’adresse lors de l’édition du type de publication dans Meta Box → Types de publication.
La vidéo ci-dessus est une présentation détaillée de la création de types de publication personnalisés dans WordPress: de la théorie au code fonctionnel à l’écran. Si vous préférez un format visuel, l’auteur montre chaque étape avec l’explication des arguments de register_post_type().
⁉️🤔 Questions fréquentes
Pourquoi un statut privé si la publication est exclue de la recherche?
L’exclusion de la recherche (
exclude_from_search) retire la publication uniquement des résultats deWP_Querysur le frontend. Les URL directes, l’API REST et les flux RSS continuent de servir le contenu. Le statutprivateferme l’accès au niveau du cœur de WordPress, la publication n’est visible que par les utilisateurs ayant la capacitéread_private_posts(administrateurs et éditeurs).
L’utilisateur peut-il changer le statut de la publication après publication?
Via l’interface standard de WP-Recall, non. Le formulaire frontend ne donne pas accès à la sélection du statut. Mais si l’utilisateur obtient d’une manière ou d’une autre l’accès au panneau d’administration (rôle Auteur et supérieur), il peut modifier ses publications. Donc, pour les sites qui acceptent des demandes, ne donnez pas aux utilisateurs un rôle supérieur à Abonné.
Que faire si WP-Recall ne voit pas mon type de publication personnalisé?
Vérifiez deux paramètres dans les réglages du type de publication:
publicdoit êtretrue, etshow_ui,true. Ensuite, allez dans les réglages de WP-Recall → «Publication» et assurez-vous que votre type de publication est coché dans la liste des types autorisés. Après avoir modifié les réglages, videz le cache des permaliens: Réglages → Permaliens → Enregistrer les modifications.
Est-il obligatoire d’utiliser spécifiquement MB Custom Post Type?
Non. N’importe quelle méthode d’enregistrement d’un type de publication personnalisé fonctionnera: du code dans
functions.php(comme à l’étape 2), le plugin Custom Post Type UI ou ACF. MB Custom Post Type a été choisi pour la combinaison d’une interface visuelle et d’un coût nul. Si vous utilisez déjà ACF Pro, créez-y les types de publication, la logique ne change pas.
Le code fonctionne, mais les anciennes publications sont restées publiques, comment les masquer?
La fonction de l’étape 4 se déclenche uniquement lors de l’événement de publication. Les publications existantes doivent être traitées séparément. La méthode la plus sûre est d’aller dans le panneau d’administration, de sélectionner toutes les publications du type souhaité et, via Modification rapide, de changer le statut en Privé. Pour des centaines de publications, utilisez WP-CLI:
wp post list --post_type=user_claim --format=ids | xargs -I {} wp post update {} --post_status=private. Avant toute mise à jour en masse, faites une sauvegarde de la base de données.
Cette approche fonctionne sur des dizaines de sites: les utilisateurs soumettent des demandes via leur compte personnel et les administrateurs les voient dans le panneau d’administration. Pour la configuration typique «WP-Recall + publications privées», rien de plus n’est nécessaire.
Si vous prévoyez d’accepter des données de paiement ou des scans de passeport via le type de publication personnalisé, configurez en plus le SSL et le chiffrement des champs. Mais c’est un sujet pour un article séparé.
Ce que nous avons obtenu: liste de contrôle pour le lancement
- WP-Recall et MB Custom Post Type sont installés et activés.
- Le type de publication personnalisé est créé, via l’interface du plugin ou avec du code.
- Dans les réglages de WP-Recall → «Publication», le type de publication souhaité est coché.
- La fonction de redirection de l’étape 3 est ajoutée à
functions.php. - La fonction de statut privé de l’étape 4 est ajoutée,
post_typeest remplacé par le vôtre. - Les permaliens sont vidés: Réglages → Permaliens → Enregistrer les modifications.
- Un utilisateur test a soumis une demande depuis son compte personnel, la redirection fonctionne, la publication est privée.
Un seul test de soumission de demande fait gagner une heure de débogage du type «pourquoi ça ne marche pas» en production. Ne sautez pas cette étape.
Commencez par installer MB Custom Post Type, le constructeur visuel vous évitera les tracas avec les arguments de register_post_type(). Et si vous utilisez déjà un autre constructeur de type de publication (ACF, CPT UI), prenez simplement les fonctions des étapes 3 et 4: la redirection et le statut privé fonctionnent indépendamment de la méthode d’enregistrement du CPT.
Et vous, quelle méthode utilisez-vous pour accepter les demandes des utilisateurs sur vos sites WordPress? Partagez dans les commentaires, c’est intéressant de comparer les approches.



