
📝 WP-Recall: konfigurering av privat innleggspublisering for brukere
Brukere fylte ut et skjema på sin personlige konto, klikket «Send», og søknaden havnet i nettstedets offentlige feed. Sammen med telefonnummer, adresse og passdata.
Dette skjer når en egendefinert innholdstype er konfigurert som offentlig. WordPress viser som standard alt som er opprettet med 'public' => true, enten det ble publisert av en administrator eller en besøkende via et frontend-skjema i WP-Recall.
Nedenfor følger en trinnvis veiledning: vi oppretter en egendefinert innholdstype, gir den status som privat ved publisering og setter opp en omdirigering tilbake til brukerkontoen. Uten dyre alt-i-ett-pluginer: WP-Recall, MB Custom Post Type og tre funksjoner i functions.php.
💡 Rask oversikt:
- Installer WP-Recall og MB Custom Post Type, to gratis pluginer fra WordPress.org-katalogen.
- Opprett en egendefinert innholdstype via MB Custom Post Type-grensesnittet, uten en eneste kodelinje.
- Legg til tre funksjoner i
functions.php: CPT-registrering med kode (valgfritt), omdirigering etter publisering og automatisk overgang tilprivate-status. - Verifiser: brukeren publiserer en søknad fra sin personlige konto, den er kun synlig for administratorer og redaktører.
Trinn 1: Installer WP-Recall og MB Custom Post Type
Du trenger to pluginer. Begge er gratis og tilgjengelige i den offisielle WordPress.org-katalogen.
WP-Recall oppretter en personlig brukerkonto: registrering, profil, private meldinger og, det som er viktig for vår oppgave, publisering av innlegg fra frontend. Brukeren logger inn på kontoen sin, fyller ut skjemaet og sender inn søknaden. Intet adminpanel, alt skjer på nettstedets sider.
MB Custom Post Types & Custom Taxonomies, en utvidelse av Meta Box-pluginen. Gir et visuelt grensesnitt for å opprette egendefinerte innholdstyper og taksonomier. I skrivende stund har pluginen 10 000+ aktive installasjoner og en vurdering på 4,7 på WordPress.org. Den oppdateres jevnlig, siste versjon ble lansert i juni 2026.
Begge pluginer installeres på standard måte: Plugins → Legg til ny, søk på navn, «Installer» → «Aktiver».
Trinn 2: Opprett en egendefinert innholdstype via MB Custom Post Type-grensesnittet
Etter aktivering av pluginen dukker menyen Meta Box → Innholdstyper opp i adminpanelet. Klikk «Legg til ny» og fyll ut feltene:

Hovedinnstillinger det er verdt å konfigurere med en gang:
- Innholdstype-ID, systemnavn på latin, for eksempel
claimelleruser_request. Denne sluggen vil vises i URL-er og kode. - Etiketter, pluginen vil automatisk fylle ut norske etiketter hvis du skriver inn navnet på norsk i feltet Entallsnavn. Rediger manuelt det som ikke passer for deg.
- Støtter, kryss av for
title,editorogcustom-fields. Miniatyrbilde og kommentarer er vanligvis ikke nødvendig for søknader. - Ekskluder fra søk, aktiver. Brukerinnlegg bør ikke indekseres.
- Offentlig,
true(WP-Recall-skjemaet må kunne se innholdstypen). Vi håndterer personvern med kode i trinn 4.
Klikk «Lagre», den egendefinerte innholdstypen er registrert. Samme resultat kan oppnås med kode (et alternativ for de som foretrekker 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' );
Legg denne koden til i barnetemaets functions.php eller via Code Snippets-pluginen. Etter lagring, gå til adminpanelet, en «Søknader»-seksjon vil dukke opp i sidefeltet.
Trinn 3: Konfigurer omdirigering etter publisering
Som standard viser WP-Recall brukeren selve innlegget etter innsending. For søknader er dette meningsløst, personen trenger sin personlige konto, ikke en side med skjemaet de nettopp sendte inn.
Funksjonen nedenfor fanger opp update_post_rcl-hooken (WP-Recall-hendelse etter publisering) og omdirigerer brukeren tilbake til sin søknadsseksjon:
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' );
Her kalles get_current_user_id() inne i funksjonen, i motsetning til det vanlige mønsteret med en variabel utenfor, dette er pålitelig uavhengig av filinnlastingsrekkefølge. Bytt ut /account/-stien med URL-en til din personlige konto i din WP-Recall-installasjon.
Sjekk: logg inn som en testbruker, publiser et innlegg fra kontoen, nettleseren skal returnere til siden med listen over søknader.
Trinn 4: Gjør innlegget automatisk privat
Dette er det avgjørende trinnet. Selv om den egendefinerte innholdstypen er skjult for søk, er selve innlegget med post_status = 'publish' tilgjengelig via direkte lenke. Og det finnes nok måter å finne denne lenken på: fra RSS-strømmer til wp-json REST API.
transition_post_status-hooken utløses ved ethvert bytte av innleggsstatus. Vi fanger opp øyeblikket når statusen endres til publish og setter den tvungent til 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 );

Hva som skjer her linje for linje:
transition_post_status, en WordPress-hook som kalles ved hver overgang av et innlegg fra én status til en annen.- Den første betingelsen sjekker
post_typefor å unngå å påvirke vanlige innlegg og sider. - Den andre betingelsen fanger opp publiseringsøyeblikket (
publish), ikke avpublisering. - Den tredje betingelsen (
$old_status !== $new_status) forhindrer gjentatt utløsing nårwp_update_postselv kaller denne samme hooken.
Sørg for å erstatte 'user_claim' med din egendefinerte innholdstype-ID. Er du usikker på ID-en, sjekk den i adressefeltet når du redigerer innholdstypen i Meta Box → Innholdstyper.
Videoen over er en detaljert gjennomgang av å opprette egendefinerte innholdstyper i WordPress: fra teori til fungerende kode på skjermen. Hvis du foretrekker et visuelt format, viser forfatteren hvert trinn med forklaring av register_post_type()-argumenter.
⁉️🤔 Ofte stilte spørsmål
Hvorfor privat status i det hele tatt hvis innlegget er ekskludert fra søk?
Ekskludering fra søk (
exclude_from_search) fjerner innlegget kun fraWP_Query-resultater på frontend. Direkte URL-er, REST API og RSS-strømmer serverer fortsatt innholdet.private-statusen stenger tilgang på WordPress-kjernenivå, innlegget er kun synlig for brukere medread_private_posts-kapabiliteten (administratorer og redaktører).
Kan brukeren endre innleggsstatusen etter publisering?
Via standard WP-Recall-grensesnitt, nei. Frontend-skjemaet gir ikke tilgang til statusvalg. Men hvis brukeren på en eller annen måte får tilgang til adminpanelet (Forfatter-rollen og høyere), kan de redigere sine innlegg. Så for nettsteder som mottar søknader, ikke gi brukere en rolle høyere enn Abonnent.
Hva gjør jeg hvis WP-Recall ikke ser min egendefinerte innholdstype?
Sjekk to parametere i innholdstypeinnstillingene:
publicskal væretrue, ogshow_ui,true. Gå deretter til WP-Recall-innstillinger → «Publisering» og forsikre deg om at din innholdstype er avkrysset i listen over tillatte typer. Etter å ha endret innstillinger, tøm permalenke-cachen: Innstillinger → Permalenker → Lagre endringer.
Er det obligatorisk å bruke akkurat MB Custom Post Type?
Nei. Enhver metode for å registrere en egendefinert innholdstype vil fungere: kode i
functions.php(som i trinn 2), Custom Post Type UI-pluginen eller ACF. MB Custom Post Type ble valgt for kombinasjonen av visuelt grensesnitt og null kostnad. Hvis du allerede bruker ACF Pro, opprett innholdstyper i den, logikken endres ikke.
Koden fungerer, men gamle innlegg forble offentlige, hvordan skjuler jeg dem?
Funksjonen fra trinn 4 utløses kun ved publiseringshendelsen. Eksisterende innlegg må behandles separat. Den tryggeste måten er å gå til adminpanelet, velge alle innlegg av den nødvendige typen, og via Hurtigredigering endre status til Privat. For hundrevis av innlegg, bruk WP-CLI:
wp post list --post_type=user_claim --format=ids | xargs -I {} wp post update {} --post_status=private. Før masseoppdatering, ta en databasebackup.
Denne tilnærmingen fungerer på dusinvis av nettsteder: brukere sender inn søknader via sin personlige konto, og administratorer ser dem i adminpanelet. For det typiske «WP-Recall + private innlegg»-oppsettet trengs ikke noe annet.
Hvis du skal motta betalingsdata eller passkopier via den egendefinerte innholdstypen, konfigurer i tillegg SSL og feltkryptering. Men det er et tema for en egen artikkel.
Hva vi fikk: sjekkliste for lansering
- WP-Recall og MB Custom Post Type er installert og aktivert.
- Egendefinert innholdstype er opprettet, via plugin-grensesnittet eller med kode.
- I WP-Recall-innstillinger → «Publisering» er den nødvendige innholdstypen avkrysset.
- Omdirigeringsfunksjonen fra trinn 3 er lagt til i
functions.php. - Privat status-funksjonen fra trinn 4 er lagt til,
post_typeer erstattet med din. - Permalenker er tømt: Innstillinger → Permalenker → Lagre endringer.
- En testbruker sendte inn en søknad fra sin personlige konto, omdirigering fungerer, innlegget er privat.
Én testkjøring av en søknad sparer en time med feilsøking av «hvorfor det ikke virker» i produksjon. Ikke hopp over dette trinnet.
Start med å installere MB Custom Post Type, den visuelle byggeren vil spare deg for bryet med register_post_type()-argumenter. Og hvis du allerede bruker en annen innholdstype-bygger (ACF, CPT UI), bare ta funksjonene fra trinn 3 og 4: omdirigering og privat status fungerer uavhengig av CPT-registreringsmetoden.
Og hvilken metode bruker du for å motta søknader fra brukere på dine WordPress-nettsteder? Del i kommentarene, det er interessant å sammenligne tilnærminger.



