
📝 WP-Recall: konfigurera privat publicering av inlägg för användare
Användare fyllde i ett formulär i sitt personliga konto, klickade på "Skicka" och ansökan hamnade i sajtens publika flöde. Tillsammans med telefonnummer, adress och passuppgifter.
Detta händer när en anpassad posttyp är konfigurerad som publik. WordPress visar som standard allt som skapats med 'public' => true, oavsett om det publicerats av en administratör eller en besökare via ett frontend-formulär i WP-Recall.
Nedan följer en steg-för-steg-guide: vi skapar en anpassad posttyp, tilldelar den statusen privat vid publicering och konfigurerar en omdirigering tillbaka till användarkontot. Utan dyra allt-i-ett-plugins: WP-Recall, MB Custom Post Type och tre funktioner i functions.php.
💡 Snabb översikt:
- Installera WP-Recall och MB Custom Post Type, två gratis plugins från WordPress.org-katalogen.
- Skapa en anpassad posttyp via MB Custom Post Types gränssnitt, utan en enda rad kod.
- Lägg till tre funktioner i
functions.php: CPT-registrering med kod (valfritt), omdirigering efter publicering och automatisk övergång tillprivate-status. - Verifiera: användaren publicerar en ansökan från sitt personliga konto, den är endast synlig för administratörer och redaktörer.
Steg 1: Installera WP-Recall och MB Custom Post Type
Du behöver två plugins. Båda är gratis och tillgängliga i den officiella WordPress.org-katalogen.
WP-Recall skapar ett personligt användarkonto: registrering, profil, privata meddelanden och, vilket är viktigt för vår uppgift, publicering av inlägg från frontend. Användaren loggar in på sitt konto, fyller i formuläret och skickar in ansökan. Ingen adminpanel, allt sker på sajtens sidor.
MB Custom Post Types & Custom Taxonomies, ett tillägg till Meta Box-pluginet. Ger ett visuellt gränssnitt för att skapa anpassade posttyper och taxonomier. I skrivande stund har pluginet 10 000+ aktiva installationer och betyget 4,7 på WordPress.org. Det uppdateras regelbundet, den senaste versionen släpptes i juni 2026.
Båda pluginen installeras på standardvägen: Plugins → Lägg till nytt, sök efter namn, "Installera" → "Aktivera".
Steg 2: Skapa en anpassad posttyp via MB Custom Post Types gränssnitt
Efter aktivering av pluginet visas en Meta Box → Post Types-meny i adminpanelen. Klicka på "Lägg till ny" och fyll i fälten:

Huvudinställningar som är värda att konfigurera direkt:
- Posttyps-ID, systemnamn på latin, till exempel
claimelleruser_request. Denna slug kommer att synas i webbadresser och kod. - Etiketter, pluginet fyller automatiskt i engelska etiketter om du anger namnet på engelska i fältet Singular Name. Redigera manuellt det som inte passar dig.
- Stöd, markera
title,editorochcustom-fields. Miniatyrbild och kommentarer behövs vanligtvis inte för ansökningar. - Exkludera från sökning, aktivera. Användarinlägg bör inte indexeras.
- Publik,
true(WP-Recall-formuläret måste kunna se posttypen). Vi hanterar integritet med kod i steg 4.
Klicka på "Spara", den anpassade posttypen är registrerad. Samma resultat kan uppnås med kod (ett alternativ för dem som föredrar 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' );
Lägg till denna kod i ditt barntemas functions.php eller via Code Snippets-pluginet. Efter att du sparat, gå till adminpanelen, en "Ansökningar"-sektion kommer att visas i sidofältet.
Steg 3: Konfigurera omdirigering efter publicering
Som standard visar WP-Recall användaren själva inlägget efter inskick. För ansökningar är detta meningslöst, personen behöver sitt personliga konto, inte en sida med formuläret de just skickade in.
Funktionen nedan fångar upp update_post_rcl-hooken (WP-Recall-händelse efter publicering) och omdirigerar användaren tillbaka till deras ansökningssektion:
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' );
Här anropas get_current_user_id() inuti funktionen, till skillnad från det vanliga mönstret med en variabel utanför, detta är tillförlitligt oavsett filens laddningsordning. Ersätt sökvägen /account/ med webbadressen till ditt personliga konto i din WP-Recall-installation.
Kontrollera: logga in som en testanvändare, publicera ett inlägg från kontot, webbläsaren bör återvända till sidan med listan över ansökningar.
Steg 4: Gör automatiskt inlägget privat
Detta är det avgörande steget. Även om den anpassade posttypen är dold från sökning, är själva inlägget med post_status = 'publish' tillgängligt via direktlänk. Och det finns tillräckligt många sätt att hitta denna länk: från RSS-flöden till wp-json REST API.
transition_post_status-hooken aktiveras vid varje ändring av poststatus. Vi fångar ögonblicket när statusen ändras till publish och tvingar den till 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 );

Vad som händer här rad för rad:
transition_post_status, en WordPress-hook som anropas vid varje övergång av ett inlägg från en status till en annan.- Det första villkoret kontrollerar
post_typeför att undvika att påverka vanliga inlägg och sidor. - Det andra villkoret fångar publiceringsögonblicket (
publish), inte avpublicering. - Det tredje villkoret (
$old_status !== $new_status) förhindrar upprepad triggning närwp_update_postsjälv anropar samma hook.
Se till att ersätta 'user_claim' med ditt anpassade posttyps-ID. Osäker på ID:t, kontrollera det i adressfältet när du redigerar posttypen i Meta Box → Post Types.
Videon ovan är en detaljerad genomgång av att skapa anpassade posttyper i WordPress: från teori till fungerande kod på skärmen. Om du föredrar ett visuellt format visar författaren varje steg med förklaring av register_post_type()-argument.
⁉️🤔 Vanliga frågor
Varför överhuvudtaget privat status om inlägget är exkluderat från sökning?
Exkludering från sökning (
exclude_from_search) tar endast bort inlägget frånWP_Query-resultat på frontend. Direkta webbadresser, REST API och RSS-flöden levererar fortfarande innehållet. Statusenprivatestänger åtkomst på WordPress-kärnnivå, inlägget är endast synligt för användare medread_private_posts-behörighet (administratörer och redaktörer).
Kan användaren ändra poststatus efter publicering?
Via standardgränssnittet i WP-Recall, nej. Frontend-formuläret ger inte tillgång till statusval. Men om användaren på något sätt får tillgång till adminpanelen (rollen Författare och högre) kan de redigera sina inlägg. Så för sajter som tar emot ansökningar, ge inte användare en roll högre än Prenumerant.
Vad gör jag om WP-Recall inte ser min anpassade posttyp?
Kontrollera två parametrar i posttypens inställningar:
publicska varatrue, ochshow_ui,true. Gå sedan till WP-Recall-inställningar → "Publicering" och se till att din posttyp är markerad i listan över tillåtna typer. Efter att ha ändrat inställningar, töm permalänk-cachen: Inställningar → Permalänkar → Spara ändringar.
Är det obligatoriskt att använda just MB Custom Post Type?
Nej. Vilken metod som helst för att registrera en anpassad posttyp fungerar: kod i
functions.php(som i steg 2), pluginet Custom Post Type UI eller ACF. MB Custom Post Type valdes för kombinationen av visuellt gränssnitt och noll kostnad. Om du redan använder ACF Pro, skapa posttyper i det, logiken förändras inte.
Koden fungerar, men gamla inlägg förblev publika, hur döljer jag dem?
Funktionen från steg 4 aktiveras endast vid publiceringshändelsen. Befintliga inlägg måste bearbetas separat. Det säkraste sättet är att gå till adminpanelen, välja alla inlägg av den önskade typen och via Snabbredigering ändra status till Privat. För hundratals inlägg, använd WP-CLI:
wp post list --post_type=user_claim --format=ids | xargs -I {} wp post update {} --post_status=private. Gör en databasbackup före massuppdatering.
Detta tillvägagångssätt fungerar på dussintals sajter: användare skickar in ansökningar via sitt personliga konto, och administratörer ser dem i adminpanelen. För den typiska "WP-Recall + privata inlägg"-uppsättningen behövs inget mer.
Om du ska ta emot betalningsdata eller passkopior via den anpassade posttypen, konfigurera dessutom SSL och fältkryptering. Men det är ett ämne för en separat artikel.
Vad vi fick: checklista för lansering
- WP-Recall och MB Custom Post Type är installerade och aktiverade.
- Anpassad posttyp är skapad, via plugin-gränssnittet eller med kod.
- I WP-Recall-inställningar → "Publicering" är den önskade posttypen markerad.
- Omdirigeringsfunktionen från steg 3 är tillagd i
functions.php. - Funktionen för privat status från steg 4 är tillagd,
post_typeär ersatt med din. - Permalänkar är tömda: Inställningar → Permalänkar → Spara ändringar.
- En testanvändare skickade in en ansökan från sitt personliga konto, omdirigering fungerar, inlägget är privat.
En testansökningsrunda sparar en timmes felsökning av "varför det inte fungerar" i produktion. Hoppa inte över detta steg.
Börja med att installera MB Custom Post Type, den visuella byggaren besparar dig besvär med register_post_type()-argument. Och om du redan använder en annan posttypsbyggare (ACF, CPT UI), ta bara funktionerna från steg 3 och 4: omdirigering och privat status fungerar oberoende av CPT-registreringsmetoden.
Och vilken metod använder du för att ta emot ansökningar från användare på dina WordPress-sajter? Dela i kommentarerna, det är intressant att jämföra tillvägagångssätt.



