Skip to content

Kaikki WordPressistä, web-kehityksestä — ja paljon muuta

📝 WP-Recall: yksityisten artikkelien julkaisun määrittäminen käyttäjille

📝 WP-Recall: yksityisten artikkelien julkaisun määrittäminen käyttäjille

Käyttäjät täyttivät lomakkeen henkilökohtaisella tilillään, klikkasivat "Lähetä", ja hakemus päätyi sivuston julkiseen syötteeseen. Mukana puhelinnumero, osoite ja passitiedot.

Näin käy, kun mukautettu sisältötyyppi on määritetty julkiseksi. WordPress näyttää oletuksena kaiken, mikä on luotu asetuksella 'public' => true, olipa sen julkaissut ylläpitäjä tai kävijä frontend-lomakkeen kautta WP-Recall-lisäosassa.

Alla on vaiheittainen opas: luomme mukautetun sisältötyypin, asetamme sille yksityisen tilan julkaisun yhteydessä ja määritämme uudelleenohjauksen takaisin käyttäjätilille. Ilman kalliita kaikki yhdessä -lisäosia: WP-Recall, MB Custom Post Type ja kolme funktiota functions.php-tiedostossa.

💡 Nopea yleiskatsaus:

  • Asenna WP-Recall ja MB Custom Post Type, kaksi ilmaista lisäosaa WordPress.orgin valikoimasta.
  • Luo mukautettu sisältötyyppi MB Custom Post Type -käyttöliittymän kautta ilman yhtäkään riviä koodia.
  • Lisää kolme funktiota functions.php-tiedostoon: CPT-rekisteröinti koodilla (valinnainen), uudelleenohjaus julkaisun jälkeen ja automaattinen siirtyminen private-tilaan.
  • Varmista: käyttäjä julkaisee hakemuksen henkilökohtaiselta tililtään, se näkyy vain ylläpitäjille ja päätoimittajille.

Vaihe 1: Asenna WP-Recall ja MB Custom Post Type

Tarvitset kaksi lisäosaa. Molemmat ovat ilmaisia ja saatavilla virallisesta WordPress.org-valikoimasta.

WP-Recall luo käyttäjän henkilökohtaisen tilin: rekisteröityminen, profiili, yksityisviestit ja, mikä on tehtävämme kannalta olennaista, julkaisujen tekeminen frontendistä. Käyttäjä kirjautuu tililleen, täyttää lomakkeen ja lähettää hakemuksen. Ei hallintapaneelia, kaikki tapahtuu sivuston sivuilla.

MB Custom Post Types & Custom Taxonomies, Meta Box -lisäosan laajennus. Tarjoaa visuaalisen käyttöliittymän mukautettujen sisältötyyppien ja taksonomioiden luomiseen. Kirjoitushetkellä lisäosalla on yli 10 000 aktiivista asennusta ja arvosana 4,7 WordPress.orgissa. Sitä päivitetään säännöllisesti, uusin versio julkaistiin kesäkuussa 2026.

Molemmat lisäosat asennetaan tavalliseen tapaan: Lisäosat → Lisää uusi, hae nimellä, "Asenna" → "Ota käyttöön".

Vaihe 2: Luo mukautettu sisältötyyppi MB Custom Post Type -käyttöliittymän kautta

Lisäosan aktivoinnin jälkeen hallintapaneeliin ilmestyy Meta Box → Post Types -valikko. Klikkaa "Add New" ja täytä kentät:

MB Custom Post Types -lisäosan mukautetun sisältötyypin luontikäyttöliittymä

Tärkeimmät asetukset, jotka kannattaa määrittää heti:

  • Post type ID, järjestelmänimi latinaksi, esimerkiksi claim tai user_request. Tämä polkutunnus näkyy URL-osoitteissa ja koodissa.
  • Labels, lisäosa täyttää automaattisesti suomenkieliset nimikkeet, jos syötät nimen suomeksi Singular Name -kenttään. Muokkaa manuaalisesti, mikä ei toimi kohdallasi.
  • Supports, valitse title, editor ja custom-fields. Artikkelikuvaa ja kommentteja ei yleensä tarvita hakemuksissa.
  • Exclude from search, ota käyttöön. Käyttäjien julkaisuja ei pidä indeksoida.
  • Public, true (WP-Recall-lomakkeen täytyy nähdä sisältötyyppi). Hoidamme yksityisyyden koodilla vaiheessa 4.

Klikkaa "Save", mukautettu sisältötyyppi on rekisteröity. Sama tulos voidaan saavuttaa koodilla (vaihtoehto niille, jotka suosivat functions.php-tiedostoa):

1function 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}
19add_action( 'init', 'sdstudio_register_private_cpt' );

Lisää tämä koodi lapsiteemasi functions.php-tiedostoon tai Code Snippets -lisäosan kautta. Tallennuksen jälkeen hallintapaneelin sivupalkkiin ilmestyy "Hakemukset"-osio.

Vaihe 3: Määritä uudelleenohjaus julkaisun jälkeen

Oletuksena WP-Recall näyttää käyttäjälle itse julkaisun lähetyksen jälkeen. Hakemuksille tämä on turhaa, henkilö tarvitsee henkilökohtaisen tilinsä, ei sivua juuri lähettämällään lomakkeella.

Alla oleva funktio sieppaa update_post_rcl-koukun (WP-Recall-tapahtuma julkaisun jälkeen) ja ohjaa käyttäjän takaisin hänen hakemuksensa osioon:

1/**
2 * Redirect to personal account after publishing a post via WP-Recall.
3 * Add to functions.php of the child theme.
4 */
5function sdstudio_redirect_after_rcl_publish() {
6 $user_id = get_current_user_id();
7 wp_redirect( '/account/?user=' . $user_id . '&tab=publics' );
8 exit;
9}
10add_action( 'update_post_rcl', 'sdstudio_redirect_after_rcl_publish' );

Tässä get_current_user_id() kutsutaan funktion sisällä, toisin kuin yleinen tapa muuttujan kanssa ulkopuolella, tämä on luotettavaa tiedostojen latausjärjestyksestä riippumatta. Korvaa /account/-polku WP-Recall-asennuksesi henkilökohtaisen tilin URL-osoitteella.

Tarkista: kirjaudu sisään testikäyttäjänä, julkaise julkaisu tililtä, selaimen pitäisi palata hakemuslistan sivulle.

Vaihe 4: Tee julkaisusta automaattisesti yksityinen

Tämä on avainvaihe. Vaikka mukautettu sisältötyyppi olisi piilotettu hausta, itse julkaisu, jonka post_status = 'publish', on käytettävissä suoran linkin kautta. Ja tapoja löytää tämä linkki on riittävästi: RSS-syötteistä wp-json REST API:iin.

transition_post_status-koukku laukeaa jokaisesta julkaisun tilan muutoksesta. Nappaamme hetken, jolloin tila muuttuu tilaksi publish ja asetamme sen väkisin tilaan 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 */
6function 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}
14add_action( 'transition_post_status', 'sdstudio_force_private_status', 10, 3 );
Mukautetun sisältötyypin asetukset yksityisiä käyttäjähakemuksia varten

Mitä tässä tapahtuu rivi riviltä:

  • transition_post_status, WordPress-koukku, jota kutsutaan jokaisessa julkaisun tilasiirtymässä tilasta toiseen.
  • Ensimmäinen ehto tarkistaa post_type-arvon, jotta tavallisiin artikkeleihin ja sivuihin ei kosketa.
  • Toinen ehto nappaa julkaisuhetken (publish), ei julkaisun peruutusta.
  • Kolmas ehto ($old_status !== $new_status) estää toistuvan laukeamisen, kun wp_update_post itse kutsuu tätä samaa koukkua.

Muista korvata 'user_claim' omalla mukautetun sisältötyyppisi ID:llä. Jos et ole varma ID:stä, tarkista se osoiteriviltä, kun muokkaat sisältötyyppiä kohdassa Meta Box → Post Types.

Yllä oleva video on yksityiskohtainen läpikäynti mukautettujen sisältötyyppien luomisesta WordPressissä: teoriasta toimivaan koodiin ruudulla. Jos pidät visuaalisesta muodosta, tekijä näyttää jokaisen vaiheen ja selittää register_post_type()-argumentit.

⁉️🤔 Usein kysytyt kysymykset

Miksi ylipäätään yksityinen tila, jos julkaisu on suljettu pois hausta?

Hausta poissulkeminen (exclude_from_search) poistaa julkaisun vain frontendin WP_Query-tuloksista. Suorat URL-osoitteet, REST API ja RSS-syötteet tarjoilevat sisällön edelleen. private-tila sulkee pääsyn WordPress-ytimen tasolla, julkaisu näkyy vain käyttäjille, joilla on read_private_posts-oikeus (ylläpitäjät ja päätoimittajat).

Voiko käyttäjä muuttaa julkaisun tilaa julkaisun jälkeen?

Tavallisen WP-Recall-käyttöliittymän kautta ei. Frontend-lomake ei tarjoa pääsyä tilan valintaan. Mutta jos käyttäjä jotenkin saa pääsyn hallintapaneeliin (Author-rooli ja sitä korkeammat), hän voi muokata julkaisujaan. Joten hakemuksia vastaanottavilla sivustoilla älä anna käyttäjille Subscriber-roolia korkeampaa roolia.

Mitä tehdä, jos WP-Recall ei näe mukautettua sisältötyyppiäni?

Tarkista kaksi parametria sisältötyypin asetuksista: public tulee olla true ja show_ui, true. Mene sitten WP-Recall-asetuksiin → "Publication" ja varmista, että sisältötyyppisi on valittuna sallittujen tyyppien listalla. Asetusten muuttamisen jälkeen tyhjennä permalinkkien välimuisti: Settings → Permalinks → Save Changes.

Onko pakko käyttää juuri MB Custom Post Typea?

Ei. Mikä tahansa tapa rekisteröidä mukautettu sisältötyyppi toimii: koodi functions.php-tiedostossa (kuten vaiheessa 2), Custom Post Type UI -lisäosa tai ACF. MB Custom Post Type valittiin visuaalisen käyttöliittymän ja nollakustannusten yhdistelmän vuoksi. Jos käytät jo ACF Prota, luo sisältötyypit siinä, logiikka ei muutu.

Koodi toimii, mutta vanhat julkaisut jäivät julkisiksi, miten piilotan ne?

Vaiheen 4 funktio laukeaa vain julkaisutapahtumassa. Olemassa olevat julkaisut on käsiteltävä erikseen. Turvallisin tapa on mennä hallintapaneeliin, valita kaikki tarvittavan tyypin julkaisut ja vaihtaa tila Pikamuokkauksen kautta tilaan Yksityinen. Satojen julkaisujen kohdalla käytä WP-CLI:tä: wp post list --post_type=user_claim --format=ids | xargs -I {} wp post update {} --post_status=private. Ennen massa-päivitystä tee tietokannasta varmuuskopio.

Tämä lähestymistapa toimii kymmenillä sivustoilla: käyttäjät lähettävät hakemuksia henkilökohtaisen tilinsä kautta, ja ylläpitäjät näkevät ne hallintapaneelissa. Tyypilliseen "WP-Recall + yksityiset julkaisut" -kokoonpanoon ei tarvita muuta.

Jos aiot vastaanottaa maksutietoja tai passiskannauksia mukautetun sisältötyypin kautta, määritä lisäksi SSL ja kenttien salaus. Mutta se on jo toisen artikkelin aihe.

Mitä saimme: tarkistuslista julkaisua varten

  • WP-Recall ja MB Custom Post Type on asennettu ja aktivoitu.
  • Mukautettu sisältötyyppi on luotu, joko lisäosan käyttöliittymän kautta tai koodilla.
  • WP-Recall-asetuksissa → "Publication" tarvittava sisältötyyppi on valittuna.
  • Vaiheen 3 uudelleenohjausfunktio on lisätty functions.php-tiedostoon.
  • Vaiheen 4 yksityinen tila -funktio on lisätty, post_type on korvattu omallasi.
  • Permalinkit on tyhjennetty: Settings → Permalinks → Save Changes.
  • Testikäyttäjä lähetti hakemuksen henkilökohtaiselta tililtään, uudelleenohjaus toimii, julkaisu on yksityinen.

Yksi testihakemuksen ajo säästää tunnin "miksi se ei toimi" -debuggausta tuotannossa. Älä ohita tätä vaihetta.

Aloita asentamalla MB Custom Post Type, visuaalinen rakentaja säästää sinut vaivalta register_post_type()-argumenttien kanssa. Ja jos käytät jo toista sisältötyyppien rakentajaa (ACF, CPT UI), ota vain funktiot vaiheista 3 ja 4: uudelleenohjaus ja yksityinen tila toimivat riippumatta CPT-rekisteröintitavasta.

Ja mitä menetelmää sinä käytät hakemusten vastaanottamiseen käyttäjiltä WordPress-sivustoillasi? Jaa kommenteissa, on mielenkiintoista vertailla lähestymistapoja.