{"id":233660,"date":"2023-02-20T18:10:00","date_gmt":"2023-02-20T15:10:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=233660"},"modified":"2022-11-11T08:42:15","modified_gmt":"2022-11-11T05:42:15","slug":"luo-mukautettu-gutenberg-lohko-osa-10-viestien-ja-korkeamman-jaerjestyksen-komponenttien-hakeminen","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/luo-mukautettu-gutenberg-lohko-osa-10-viestien-ja-korkeamman-jaerjestyksen-komponenttien-hakeminen\/","title":{"rendered":"Luo mukautettu Gutenberg-lohko &#8211; Osa 10: Viestien ja korkeamman j\u00e4rjestyksen komponenttien hakeminen"},"content":{"rendered":"\n<p>T\u00e4ss\u00e4 Gutenbergin mukautetun lohkon opetusohjelmasarjan viimeisess\u00e4 osassa opimme k\u00e4ytt\u00e4m\u00e4\u00e4n korkeamman asteen komponentteja hy\u00f6dynt\u00e4m\u00e4\u00e4n WordPressin komponentteja kyselyjen tekemiseen viesteille ja muille WordPressin ydintiedoille.<\/p>\n<p>Edellisess\u00e4 osassa opimme dynaamisista lohkoista ja p\u00e4\u00e4dyimme ottamaan k\u00e4ytt\u00f6\u00f6n toiminnot, joiden avulla voit kirjoittaa viestitunnuksen ja k\u00e4ytt\u00e4\u00e4 PHP:t\u00e4 postauksen dynaamiseen hakemiseen ja hahmontamiseen k\u00e4ytt\u00f6liittym\u00e4- ja esikatselutilassa. Viestitunnuksen kirjoittaminen manuaalisesti ei ole intuitiivista tai k\u00e4ytt\u00e4j\u00e4yst\u00e4v\u00e4llist\u00e4. On paljon parempi tarjota k\u00e4ytt\u00e4j\u00e4lle jokin tapa valita tai etsi\u00e4 viestej\u00e4 julkaisun otsikon perusteella ja napsauttamalla jotakin valitaksesi.<\/p>\n<p>Yksi osa t\u00e4m\u00e4n ratkaisemisesta on melko helppoa; miten voit kysell\u00e4 viestej\u00e4 lohkosi <code>edit<\/code>funktiosta. Meill\u00e4 on t\u00e4h\u00e4n muutama vaihtoehto, ja paras vaihtoehto on k\u00e4ytt\u00e4\u00e4 joitain WordPressin niin sanottuja <a href=\"https:\/\/reactjs.org\/docs\/higher-order-components.html\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">korkeamman asteen komponentteja .<\/a> Voit my\u00f6s k\u00e4ytt\u00e4\u00e4 Javascript-selainmenetelmi\u00e4 AJAX-kutsujen suorittamiseen kohti WordPress REST API:ta esimerkiksi <code>[fetch](https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Fetch_API)<\/code>tai aksioiden avulla. WordPress tarjoaa itse asiassa oman versionsa <code>fetch<\/code>: <code>apiFetch()<\/code>.<\/p>\n<p>Toinen osa t\u00e4m\u00e4n ratkaisemisesta on hieman sinun p\u00e4\u00e4tett\u00e4viss\u00e4si. N\u00e4in esit\u00e4mme luettelon tai valinnan lohkossamme. Miten aiot esitt\u00e4\u00e4 luettelon postauksista, joista valita? Valitussa, valintaruutujen luettelossa tai valintanapeissa? Vai haluatko tarjota hakumahdollisuuden ja siten toteuttaa automaattisen t\u00e4ydennysratkaisun tai suodatinratkaisun? Pit\u00e4isik\u00f6 sinun sallia useiden viestien valitseminen vai vain yksi? Yleens\u00e4 voit ratkaista t\u00e4m\u00e4n k\u00e4ytt\u00e4m\u00e4ll\u00e4 erilaisia \u200b\u200b\u200b\u200bWordPress-komponentteja, mutta sinun on p\u00e4\u00e4tett\u00e4v\u00e4, mink\u00e4 ratkaisun haluat toteuttaa.<\/p>\n<p>Opitaanpa ensin hieman korkeamman asteen komponenteista ja WordPress-tietomoduulista, ennen kuin tarkastellaan, kuinka voimme suorittaa viestikyselyit\u00e4 lohkossamme.<\/p>\n<h2>WordPress Core Data -moduuli ja korkeamman tason komponentit<\/h2>\n<p>Kun ty\u00f6skentelet Reactin kanssa, sinun on usein siirrett\u00e4v\u00e4 tila alasp\u00e4in lapsikomponentteihin tai yl\u00f6sp\u00e4in yhteiseen vanhemmuuden komponenttiin, jotta kaikki muut alikomponentit p\u00e4\u00e4sev\u00e4t k\u00e4siksi niihin. Ratkaisu sovelluksen tilan keskitt\u00e4miseen on <a href=\"https:\/\/redux.js.org\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Reduxin<\/a> avulla. Reduxin avulla voit rakentaa kauppoja, jotka ovat objekteja, jotka sis\u00e4lt\u00e4v\u00e4t sovelluksen tilan ja tiedot.<\/p>\n<p><a href=\"https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WordPress Data -moduuli<\/a> on eri kauppojen keskus ja tarjoaa toimintoja tietojen hallintaan eri moduulien v\u00e4lill\u00e4. Se on rakennettu Reduxin p\u00e4\u00e4lle \u2013 mutta \u00e4l\u00e4 pid\u00e4 sit\u00e4 WordPressin Reduxina, sill\u00e4 siin\u00e4 on melko v\u00e4h\u00e4n eroja. Voit rekister\u00f6id\u00e4 omat myym\u00e4l\u00e4si WordPressiin tai, mik\u00e4 ehk\u00e4 viel\u00e4 t\u00e4rke\u00e4mp\u00e4\u00e4, k\u00e4ytt\u00e4\u00e4 WordPressin rekister\u00f6ityj\u00e4 kauppoja.<\/p>\n<p>T\u00e4ss\u00e4 on yleiskatsaus WordPress-tietomoduulin <a href=\"https:\/\/developer.wordpress.org\/block-editor\/data\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">k\u00e4ytett\u00e4viss\u00e4 olevista kaupoista<\/a> (muuttuu todenn\u00e4k\u00f6isesti ajan my\u00f6t\u00e4). Kaikki WordPressin kaupat sis\u00e4ltyv\u00e4t <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/core-data\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Core Data -moduuliin<\/a>. Siell\u00e4 on esimerkiksi kauppoja, jotka sis\u00e4lt\u00e4v\u00e4t editorin tietoja (<code>core\/editor<\/code>), huomautuksia (<code>core\/notices<\/code>), lohkotietoja (<code>core\/blocks<\/code>), kuvaporttitietoja (<code>core\/viewport<\/code>) ja viimeisen\u00e4 mutta ei v\u00e4h\u00e4isimp\u00e4n\u00e4 itse p\u00e4\u00e4varastoa \u2013 <code>core<\/code>.<\/p>\n<p>Sinun on k\u00e4ytett\u00e4v\u00e4 valitsimia, jotta voit k\u00e4ytt\u00e4\u00e4 myym\u00e4l\u00f6iden tietoja. WordPressill\u00e4 on valitsin <code>wp.data<\/code>paketissa; <code>[select](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#select)()<\/code>. Voit my\u00f6s manipuloida kauppoja -sovelluksella <code>dispatch<\/code>, mutta t\u00e4m\u00e4 opetussarja ei kata t\u00e4t\u00e4. Voit todella helposti kokeilla valitsinta itse n\u00e4hd\u00e4ksesi, mit\u00e4 WordPressin myym\u00e4l\u00f6iss\u00e4 on saatavilla.<\/p>\n<h3>Kokeillaan valitsinta<\/h3>\n<p>Avaa Gutenberg-editori Chromessa ja avaa konsolin virheenkorjausty\u00f6kalu. Kirjoita:<\/p>\n<pre><code>wp.data.select('core')<\/code><\/pre>\n<p>Ja paina Enter. Sinun pit\u00e4isi saada objekti vastauksena kaikilla valitsimilla (funktioilla), joita voit k\u00e4ytt\u00e4\u00e4. Esimerkkein\u00e4 l\u00f6yd\u00e4t funktiot, kuten <code>getMedia<\/code>, <code>getTaxonomy<\/code>, <code>getAuthors<\/code>, ja niin edelleen. Se, jota k\u00e4yt\u00e4mme viestien kyselyyn, on my\u00f6s olemassa, mutta sill\u00e4 ei ole intuitiivista nime\u00e4; sit\u00e4 kutsutaan <code>getEntityRecords<\/code>. T\u00e4ll\u00e4 hetkell\u00e4 osa n\u00e4ist\u00e4 toiminnoista on <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/core-data#selectors\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">dokumentoitu<\/a>, mutta useimmat eiv\u00e4t valitettavasti ole.<\/p>\n<p>Kokeile my\u00f6s muita kauppoja kuin <code>core<\/code>esim.<\/p>\n<pre><code>wp.data.select('core\/editor').getBlocks()<\/code><\/pre>\n<p>T\u00e4m\u00e4 palauttaa kaikki tiedot kaikista viestiss\u00e4si t\u00e4ll\u00e4 hetkell\u00e4 olevista lohkoista. Voit leikki\u00e4 t\u00e4m\u00e4n kanssa Chrome-konsolin virheenkorjausohjelmassa ja yritt\u00e4\u00e4 kutsua joitain toimintoja n\u00e4hd\u00e4ksesi, mit\u00e4 saat vastauksena. Jotkut vaativat parametreja ja toiset eiv\u00e4t.<\/p>\n<p>K\u00e4ytt\u00e4\u00e4ksemme valitsimia ja p\u00e4\u00e4st\u00e4ksemme kauppoihin meid\u00e4n on k\u00e4ytett\u00e4v\u00e4 niit\u00e4 korkeamman asteen komponenteissa. Korkeamman asteen komponentit ovat yksinkertaisesti malli tehd\u00e4 jotain Reactissa. V\u00e4lit\u00e4mme komponentin funktiolle (tai komponentille), joka voi lis\u00e4t\u00e4 joitain rekvisiitta, ja sitten palautamme uuden komponentin.<\/p>\n<p>Sis\u00e4lt\u00e4 WordPress Data moduuli l\u00f6yd\u00e4mme <code>[withSelect](https:\/\/developer.wordpress.org\/block-editor\/packages\/packages-data\/#withSelect)<\/code>; korkeamman asteen komponentti, jota voidaan k\u00e4ytt\u00e4\u00e4 rekvisiitta ruiskuttamiseen rekister\u00f6ityjen valitsimien avulla. Toisin sanoen; sis\u00e4ll\u00e4 <code>withSelect<\/code>meill\u00e4 on p\u00e4\u00e4sy valitsimeen <code>select()<\/code>ja voimme k\u00e4ytt\u00e4\u00e4 sit\u00e4 puhelujen suorittamiseen. Valitsimen tulokset ovat sen komponentin rekvisiitta, johon siirrymme <code>withSelect<\/code>. Jos sinun on yhdistett\u00e4v\u00e4 useita korkeamman asteen komponentteja, WordPress Data -moduuli tarjoaa <code>compose<\/code>toiminnon, mutta t\u00e4m\u00e4 ei kuulu t\u00e4m\u00e4n opetusohjelman piiriin. K\u00e4yt\u00e4mme vain yht\u00e4 korkeamman asteen komponenttia; <code>withSelect<\/code>.<\/p>\n<p>T\u00e4m\u00e4 on ollut paljon teoriaa, joten aletaan tarkastella koodia ja k\u00e4yt\u00e4nn\u00f6n esimerkkej\u00e4.<\/p>\n<h2>Viestien hakeminen withSelect-toiminnolla, valitse ja hanki EntityRecords<\/h2>\n<p>Yhteenvetona edell\u00e4 olevista meid\u00e4n on m\u00e4\u00e4ritett\u00e4v\u00e4 korkeamman asteen komponentti <code>withSelect<\/code>lohkollemme. T\u00e4m\u00e4n sis\u00e4ll\u00e4 voimme k\u00e4ytt\u00e4\u00e4 valitsimia p\u00e4\u00e4st\u00e4ksemme WordPressin kauppoihin, jotka ovat rekvisiitta komponentille, johon siirrymme <code>withSelect<\/code>. K\u00e4yt\u00e4mme <code>core<\/code>kauppaa ja valitsinta <code>getEntityRecords<\/code>viestien kyselyyn.<\/p>\n<p>Toimintoa <code>getEntityRecords<\/code>ei valitettavasti <a href=\"https:\/\/github.com\/WordPress\/gutenberg\/tree\/master\/packages\/core-data#getEntityRecords\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ole kovin dokumentoitu<\/a> t\u00e4ll\u00e4 hetkell\u00e4. Mutta olen oppinut, ett\u00e4 voimme v\u00e4litt\u00e4\u00e4 <code>postType<\/code>ensimm\u00e4isen\u00e4 parametrina (entiteettityyppi) ja sitten viestityypin toisena parametrina (esim. &#8217; <code>post<\/code>&#8217; tai &#8217; <code>page<\/code>&#8217;). Kolmas parametri on valinnainen ja voi olla objekti, jossa on kyselyargumentteja. Tarkastellaan kolmatta parametria my\u00f6hemmin.<\/p>\n<p>Jos noudatit t\u00e4t\u00e4 opetussarjaa edellisest\u00e4 osasta, sinulla olisi mukautettu lohko, joka hyv\u00e4ksyy manuaalisesti kirjoitetun viestitunnuksen tekstinsy\u00f6t\u00f6ss\u00e4. Lohko k\u00e4ytt\u00e4\u00e4 PHP:t\u00e4 dynaamisesti hahmontamaan viestin k\u00e4ytt\u00f6liittym\u00e4ss\u00e4 (ja esikatselutilassa). Poistetaan vaatimus post ID:n manuaalisesta kirjoittamisesta ja korvataan se jollain intuitiivisemmalla. Kuten aiemmin mainittiin, sinun on itse p\u00e4\u00e4tett\u00e4v\u00e4, miten viestiluettelo esitet\u00e4\u00e4n ja mik\u00e4 on paras tapa antaa k\u00e4ytt\u00e4j\u00e4n valita viesti. Yksinkertaisuuden vuoksi lis\u00e4\u00e4mme valikoiman kaikista viestien otsikoista, joista valita.<\/p>\n<h3>Koodaus<code>withSelect<\/code><\/h3>\n<p>Aloitetaan t\u00e4m\u00e4n koodaaminen. Ensin meid\u00e4n on tuhottava tietopaketista se, mit\u00e4 tarvitsemme;<\/p>\n<pre><code>const { withSelect, select } = wp.data;<\/code><\/pre>\n<p>Sitten k\u00e4yt\u00e4mme <code>withSelect<\/code>lohkomme <code>edit<\/code>funktiossa ja v\u00e4lit\u00e4mme muokkauskomponenttimme; <code>FirstBlockEdit<\/code>. Sis\u00e4ll\u00e4 <code>withSelect<\/code>destructure <code>select<\/code>parametrina ja k\u00e4yt\u00e4 valitsinta <code>select()<\/code>kyselyihin viestien kanssa <code>getEntityRecords<\/code>. Palautamme objektin, jolla on yksi ominaisuus, jota kutsumme ja <code>posts<\/code>joka sis\u00e4lt\u00e4\u00e4 puhelun tuloksen <code>select()<\/code>.<\/p>\n<pre><code>...\nedit: withSelect(select =&gt; {\n    return {\n        posts: select('core').getEntityRecords('postType', 'post')\n    }\n})(FirstBlockEdit),\nsave:() =&gt; { return null }\n...<\/code><\/pre>\n<p>Komponenttimme yl\u00e4puolella oleva koodi <code>FirstBlockEdit<\/code>saa nyt uuden ehdotuksen; <code>posts<\/code>. Kaikki mit\u00e4 palautamme <code>withSelect<\/code>korkeamman asteen komponentin sis\u00e4\u00e4n, on k\u00e4ytett\u00e4viss\u00e4 ohittamamme komponentin rekvisiittana (sulussa aivan lopussa).<\/p>\n<h3>Viestien k\u00e4sittely valitsijalta<\/h3>\n<p>Voimme nyt menn\u00e4 komponenttiimme <code>FirstBlockEdit<\/code>ja katsoa uutta <code>props.posts<\/code>. Koska komponenttimme on luokkapohjainen komponentti, meid\u00e4n on viitattava rekvisiittauksiin <code>this<\/code>. Konsolikirjataan se ulos <code>render()<\/code>funktion sis\u00e4ll\u00e4 <code>FirstBlockEdit<\/code>:<\/p>\n<pre><code>render() {\n    const { attributes, setAttributes } = this.props;\n    console.log(this.props.posts);\n    ...\n}<\/code><\/pre>\n<p>Pid\u00e4 silm\u00e4ll\u00e4 konsolivirheenkorjausta. Saatat huomata, ett\u00e4 t\u00e4m\u00e4 kirjautuu kahdesti; ensin <code>null<\/code>ja sitten joskus my\u00f6hemmin se kirjaa joukon viestej\u00e4. T\u00e4m\u00e4 johtuu siit\u00e4, ett\u00e4 viestien kysely tapahtuu asynkronisesti. Komponenttimme render\u00f6id\u00e4\u00e4n ensin ennen vastausta, jolloin <code>props.posts<\/code>on <code>null<\/code>. Kun saamme vastauksen, komponenttimme hahmonnetaan uudelleen rekvisiitta t\u00e4ytettyn\u00e4. Sinun tulee aina muistaa ottaa huomioon t\u00e4m\u00e4 lyhyt aika ilman koodisi tietoja.<\/p>\n<h3>Lis\u00e4\u00e4 valinta n\u00e4ytt\u00e4\u00e4ksesi viestit<\/h3>\n<p>Valmistaudutaan t\u00e4ytt\u00e4m\u00e4\u00e4n valitut palautetuilla viesteill\u00e4 ja k\u00e4yt\u00e4mme siihen WordPress-komponenttia <code>SelectControl<\/code>. Komponentti <code>SelectControl<\/code>hyv\u00e4ksyy joukon vaihtoehtoja, joissa jokainen vaihtoehto on objekti, jolla on ominaisuudet <code>value<\/code>ja <code>label<\/code>.<\/p>\n<p>Jos katsot konsolin kirjattua (toista) vastausta, voit n\u00e4hd\u00e4, ett\u00e4 saamme joukon post-objekteja. Jokainen viesti sis\u00e4lt\u00e4\u00e4 suurimman osan postauksen tiedoista, mutta valitun valinnan osalta meit\u00e4 kiinnostaa vain postin tunnus arvona ja julkaisun otsikko otsikkona. Joten k\u00e4ymme l\u00e4pi <code>posts<\/code>propan ja t\u00e4yt\u00e4mme taulukkomuuttujan, jonka v\u00e4lit\u00e4mme <code>SelectControl<\/code>. \u00c4l\u00e4 unohda k\u00e4sitell\u00e4 pient\u00e4 aikav\u00e4li\u00e4, jossa <code>posts<\/code>rekvisiitta on <code>null<\/code>. Siin\u00e4 tapauksessa t\u00e4yt\u00e4mme valintataulukon yhdell\u00e4 vaihtoehdolla, jonka otsikko on &quot;Ladataan&#8230;&quot;.<\/p>\n<pre><code>let choices = [];\nif (this.props.posts) {\n    choices.push({ value: 0, label: __('Select a post', 'awhitepixel') });\n    this.props.posts.forEach(post =&gt; {\n        choices.push({ value: post.id, label: post.title.rendered });\n    });\n} else {\n    choices.push({ value: 0, label: __('Loading...', 'awhitepixel') })\n}<\/code><\/pre>\n<p>Huomaa, ett\u00e4 meid\u00e4n on viitattava viestin otsikkoon nimell\u00e4 <code>post.title.rendered<\/code>. Voit etsi\u00e4 itse\u00e4si kirjautuneesta konsolista <code>posts<\/code>ja n\u00e4hd\u00e4, kuinka kunkin viestin tiedot on rakennettu.<\/p>\n<p>T\u00e4m\u00e4n j\u00e4lkeen meid\u00e4n on vain lis\u00e4tt\u00e4v\u00e4 <code>SelectControl<\/code>minne haluamme sen. Se voi olla itse lohkon sis\u00e4ll\u00e4 (mieluiten muokkaustilan koodissa) tai Inspectorin sis\u00e4ll\u00e4.<\/p>\n<pre><code>&lt;SelectControl\n    label={__('Selected Post', 'awhitepixel')}\n    options={choices}\n    value={attributes.selectedPostId}\n    onChange={(newval) =&gt; setAttributes({ selectedPostId: parseInt(newval) })}\n\/&gt;<\/code><\/pre>\n<p>Asetamme <code>SelectControl<\/code>viittaamaan attribuuttiin, <code>selectedPostId<\/code>jonka m\u00e4\u00e4ritimme edellisess\u00e4 vaiheessa. Asetamme tallennetun arvon potkuriin <code>value<\/code>ja k\u00e4sittelemme sen p\u00e4ivitt\u00e4misen <code>onChange<\/code>potkurissa \u2013 kuten olemme tehneet useaan otteeseen ennenkin. Varmistamme, ett\u00e4 numero tallennetaan k\u00e4ytt\u00e4m\u00e4ll\u00e4, <code>parseInt()<\/code>koska numerolla on <code>selectedPostId<\/code>tyyppi <code>number<\/code>. Ja v\u00e4lit\u00e4mme luodun valikoiman valintoja prop <code>options<\/code>.<\/p>\n<p>Siin\u00e4 todellakin kaikki! Jos noudatit edellisen vaiheen koodia, sinulla pit\u00e4isi jo olla koodi, joka lukee tallennetun viestitunnuksen ja n\u00e4ytt\u00e4\u00e4 sen!<\/p>\n<p>Tietysti suosittelen, ett\u00e4 toteutat viestien luettelon ja valinnan eri tavalla kuin pelk\u00e4n valinnan. T\u00e4m\u00e4 ei ole kaunis tai k\u00e4ytt\u00e4j\u00e4yst\u00e4v\u00e4llinen ratkaisu, etenk\u00e4\u00e4n sivustoille, joilla on paljon viestej\u00e4. Kun puhutaan viestien m\u00e4\u00e4r\u00e4st\u00e4, huomasitko, ett\u00e4 valitsin getEntityRecords palauttaa vain enint\u00e4\u00e4n 10 viimeisint\u00e4 viesti\u00e4? T\u00e4m\u00e4 on getEntityRecordsin oletusk\u00e4ytt\u00e4ytyminen, mutta voimme muokata l\u00e4hetyskysely\u00e4 v\u00e4litt\u00e4m\u00e4ll\u00e4 kolmannen parametrin.<\/p>\n<h3>Muokkaa getEntityRecords-kysely\u00e4<\/h3>\n<p>V\u00e4litt\u00e4m\u00e4ll\u00e4 objektin kolmantena parametrina getEntityRecordsille voimme muokata l\u00e4hetyskysely\u00e4. Kuten aiemmin mainittiin, valitettavasti asiakirjat <code>getEntityRecords<\/code>puuttuvat. Mutta lukemalla koko verkkoa olen ker\u00e4nnyt luettelon mahdollisista kyselyargumenteista;<\/p>\n<ul>\n<li><code>per_page<\/code>: Aseta numero, jos haluat rajoittaa viestien m\u00e4\u00e4r\u00e4\u00e4. Aseta arvoksi <code>-1<\/code>noutaaksesi enimm\u00e4ism\u00e4\u00e4r\u00e4 100. Oletus <code>10<\/code>.<\/li>\n<li><code>exclude<\/code>: Sulje pois tietyt viestit kyselyst\u00e4. Aseta viestitunnus tai numerojoukko useille viestitunnuksille.<\/li>\n<li><code>parent_exclude<\/code>: Sulje pois tietyt vanhemman viestit. Aseta viestitunnukseksi tai useiden viestitunnusten joukkoon.<\/li>\n<li><code>orderby<\/code>: P\u00e4\u00e4t\u00e4 viestien j\u00e4rjestys. Todenn\u00e4k\u00f6isesti voit k\u00e4ytt\u00e4\u00e4 samoja parametreja kuin <a href=\"https:\/\/developer.wordpress.org\/reference\/classes\/wp_query\/#order-orderby-parameters\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">WP_Query&#8217;s orderby<\/a>. Voi olla esim. &quot; <code>menu_order<\/code>&quot;.<\/li>\n<li><code>order<\/code>: joko <code>'asc'<\/code>tai &#8217; <code>desc'<\/code>nousevassa tai laskevassa j\u00e4rjestyksess\u00e4.<\/li>\n<li><code>status<\/code>: Suodata postin tilan mukaan. Voi olla merkkijono, merkkijono, jossa on useita pilkuilla erotettuja tiloja, tai joukko tilamerkkijonoja. Esim <code>['publish', 'draft']<\/code>. tiedustella sek\u00e4 julkaistuja ett\u00e4 laadittuja viestej\u00e4.<\/li>\n<li><code>categories<\/code>: Suodata viestit tiettyjen luokkien mukaan. Anna luokkatunnus tai joukko luokkatunnuksia. Uskon, ett\u00e4 t\u00e4m\u00e4 toimii vain viestiluokissa, ei muissa mukautetuissa taksonomioissa.<\/li>\n<li><code>tags<\/code>: Suodata viestit tiettyjen tunnisteiden mukaan. Anna tunnistetunnus tai joukko tagitunnuksia. Toimii vain viestitunnisteille, ei muille mukautetuille taksonomioille.<\/li>\n<li><code>search<\/code>: Lis\u00e4\u00e4 hakukysely (merkkijono).<\/li>\n<\/ul>\n<p>Huomautus: T\u00e4m\u00e4 ei ole tyhjent\u00e4v\u00e4 luettelo, ja se voi my\u00f6s muuttua!<\/p>\n<p>Muokataan kysely\u00e4mme. Haluamme tehd\u00e4 kaksi asiaa; Ensin haluamme hakea kaikki viestit, ei vain 10 viimeisint\u00e4. T\u00e4t\u00e4 varten tarjoamme <code>-1<\/code>. <code>per_page<\/code>Toiseksi haluamme sulkea nykyisen viestin pois viestiluettelosta antamalla nykyisen viestitunnuksen osoitteeseen <code>exclude<\/code>. Usein ei ole mit\u00e4\u00e4n j\u00e4rke\u00e4 n\u00e4ytt\u00e4\u00e4 viestin pikakuvaketta tai esikatselua itse nykyisest\u00e4 viestist\u00e4.<\/p>\n<p>Saatat ajatella; odota, miten saamme nykyisen viestitunnuksen? \u00c4l\u00e4 unohda, ett\u00e4 me korkeamman asteen komponentissa <code>withSelect<\/code>ja <code>select<\/code>valitsimella p\u00e4\u00e4semme kaikkiin WordPressin ydintietovarastoihin. Nykyinen viestitunnus on luonnollinen asia tallentaa johonkin WordPressin ydinmyym\u00e4l\u00f6ist\u00e4. Sis\u00e4lt\u00e4 <code>core\/editor<\/code>l\u00f6yd\u00e4mme funktion <code>getCurrentPostId()<\/code>.<\/p>\n<p>Muokataan <code>withSelect<\/code>palautusta t\u00e4h\u00e4n tapaan:<\/p>\n<pre><code>edit: withSelect(select =&gt; {\n    const currentPostId = select('core\/editor').getCurrentPostId();\n    const query = {\n        per_page: -1,\n        exclude: currentPostId\n    }\n    return {\n        posts: select('core').getEntityRecords('postType', 'post', query)\n    }\n})(FirstBlockEdit),<\/code><\/pre>\n<p>Yll\u00e4 oleva muutos on melko itsest\u00e4\u00e4n selv\u00e4. Luomme kyselyobjektin ominaisuuksineen <code>per_page<\/code>ja <code>exclude<\/code>v\u00e4lit\u00e4mme t\u00e4m\u00e4n kolmantena parametrina <code>getEntityRecords()<\/code>. Nyt <code>props.posts<\/code>sis\u00e4isen <code>FirstBlockEdit<\/code>komponentin pit\u00e4isi luetella kaikki viestit, mutta sulkea pois nykyinen viesti.<\/p>\n<h2>Johtop\u00e4\u00e4t\u00f6s<\/h2>\n<p>T\u00e4m\u00e4 viesti p\u00e4\u00e4tt\u00e4\u00e4 Kuinka luoda mukautettuja Gutenberg-lohkoja opetusohjelmasarjan. Sarjan tarkoituksena oli k\u00e4yd\u00e4 l\u00e4pi omien mukautettujen lohkojen kehitt\u00e4misen perusteet ja tarjota sinulle l\u00e4ht\u00f6kohta omien ja monimutkaisempien lohkojen kehitt\u00e4miseen. Pid\u00e4 ehdottomasti silm\u00e4ll\u00e4 lis\u00e4\u00e4 <a href=\"https:\/\/awhitepixel.com\/blog\/category\/gutenberg\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Gutenbergiin liittyvi\u00e4 opetusohjelmia t\u00e4\u00e4lt\u00e4<\/a>. Ehk\u00e4 l\u00f6yd\u00e4t opetusohjelman, joka selitt\u00e4\u00e4 tarkemmin jotain, mit\u00e4 halusit tehd\u00e4 itse!<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/awhitepixel.com\" class=\"external external_icon\">awhitepixel.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>T\u00e4ss\u00e4 Gutenbergin mukautetun lohkon opetusohjelman osassa opimme k\u00e4ytt\u00e4m\u00e4\u00e4n korkeamman asteen komponentteja WordPressin komponenttien k\u00e4ytt\u00e4miseen viestikyselyjen suorittamiseen.<\/p>\n","protected":false},"author":1,"featured_media":152565,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[895,719,938,938,719,895,813,917,917,1110,834,843,813,834,843,864,864],"tags":[1166],"class_list":{"0":"post-233660","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-koodi","8":"category-kehittaejae","9":"category-gutenberg-5","13":"category-laajennuksia","14":"category-muut","16":"category-n-a","17":"category-opas-aloittelijoille","18":"category-opetusohjelmia","22":"category-wordpress-5","24":"tag-affiai-fi"},"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233660","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=233660"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/233660\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/152565"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=233660"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=233660"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=233660"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}