Ugrás a fő tartalomhoz

JetEngine - JetFormbuilder - CCT+CPT relations készítése

Bevezető

A JetEngine szerves részét képezi a Relations rendszer, ami magyarul kapcsolatokat jelent. Ennek segítségével, összekapcsolhatunk két különböző CPT(Custom Post Type-ot) de akár CCT(Custom Content Type), User , vagy Taxonómiát is egymással. Fontos megjegyezni, hogy a Relations nem egy olyan fejlesztés, amit a JetEngine talált ki, más fejlesztők és bővítmények is alkalmazzák ezt a technikát. Azt viszont jegyezzük meg, hogy a JetEngine csak a saját kapcsolat rendszerét ismeri fel alapértelmezetten.

JetFormbuilder

A JetFormbuilder, továbbiakban csak JFB, a Crocoblock önálló űrlap bővítménye, ami Gutenberg alapú. A JetEngine alapértelmezett Űrlap modulját hivatott leváltani. Ha eddig nem tetted meg a váltást, időszerű, ugyanis az eredeti JetEngine Form megkapta a Legacy jelzőt, ami azt jelenti, hogy már nem támogatják. A JFB segítségével tudunk úgynevezett Frontend post submissionokat készíteni, de ennél ma már sokkal többre képes. Ebben a leírásban, egy JFB kompatibilis módot fogunk végigvenni. A JetFormBuilder ingyenes, és a Wordpress Bővítmények menüpontból tudod letölteni.

Feladat

Van egy Custom Post Type, és egy Custom Content Type létrehozva. Készítünk hozzá egy relations-t, és a bejelentkezett felhasználók egy űrlap kitöltésével össze tudják kötni a CCT a CPT egy adott posztjához. Ebben a példában a CPT lesz a Parent elem, és a CCT a Child. Az űrlapunk a Parent elem single sablonjába lesz elhelyezve és amikor ott töltik ki az űrlapot, létrehozunk egy CCT és egyből összekapcsolódik az adott POST-al. Bonyolult elsőre igaz? Nyugi, megoldjuk ;)

Nem csak regisztrált felhasználóknak

Ez a technika nem igényli, hogy a kitöltőnek kötelezően bejelentkezve kell lenni.

Relations készítése

Navigáljunk a JetEngine - Relations menüponra és kattintsunk az Add New gombra. A Name mezőbe adj meg egy nevet, amit szeretnél. A Parent Object mezőben válaszd ki a már létrehozott CPT-t. Ez lesz a példánkban a szülő. A Child Object mezőben pedig a CCT kell beállítanod. A Relation Type állítsd One to many-re.

Mi az a Relation Type?

Ez a beállítás határozza meg, hogy mennyi elemet lehet egymással összekötni, legyen szó cpt, cct, user, vagy taxonómiáról. A One to Many azt jelenti egy parent elemhez több gyerek elemet kapcsolhatsz.

Az alábbi beállítások a General Settings panelen főként a Backend menedzsmentre vonatkoznak, hagyhatod alapértelmezetten. A Register Separate DB viszont javasolt bekapcsolni, ha tudod hogy több száz vagy ezer kapcsolat lesz idővel az oldalon.

PHP kiegészítés

Jelenleg ahhoz, hogy a CCT össze tudjuk kötni kívülről, egy extra php kiegészítésre van szükségünk. Az alábbi kódot bemásolhatod a functions.php fájlba, vagy specifikus bővítménybe amibe PHP kódokat lehet megadni, mint például az alábbi Code Snippets:

add_action( 'jet-engine/custom-content-types/created-item/cookshot', function ( $item, $item_id, $item_handler ) {  jet_form_builder()->form_handler->action_handler->request_data['inserted_cct_id'] = $item_id; }, 10, 3 ); 

Az itt látható kódban két elemet kell módosítanod, az első a "/created-item/cookshot". A Cookshot az én létrehozott Custom Content Type-om SLUG-ja. Ezt úgy tudod megkeresni, hogy belekattintasz a JetEngine - Custom Content Type menüpontba.

https://peldaweboldal.hu
JetEngine - Custom Content Type összesítő

A saját SLUG-od kimásolod, és kicseréled, a cookshot-al. Az utolsó rész-t nem kötelező kicserélni, de ne felejtsd el. ['inserted_cct_id'] ez a JFB-ben egy rejtett mezőnk azonosítója lesz.

Hasznos tipp!

A már létrehozott Custom Content Typeodnál, azt javasolom készíts egy egyszerű text meta mezőt, hogy a kapcsolódó CPT Post nevét az űrlap automatikusan bemásolja. Ezt kitudod rakni a CCT oszlopba is, így a backenden láthatod, az adott CCT melyik POST hoz küldték be.

JetFormbuilder - Építsük meg az űrlapunkat

Fontos!

Ez a példa úgy készül, hogy az űrlapot, a Custom Post Type single post sablonba fogjuk beállítani, mivel a CCT-nek nincs önálló single oldala úgy mint egy Custom Post Type-nak!

Navigáljunk a JetFormbuilder menüpontba, és kattintsunk az Add New gombra. Mielőtt a létrehozott CCT metáit elkezdenéd hozzáadni, először add hozzá a kötelező rendszer mezőket, amik mindegyike kivétel nélkül Hidden Field-ek Összesen alapvetően 3ra lesz szükséged, kötelező jelleggel, de ha szeretnéd bekötni az aktuális cpt post címét, akkor készíts egy negyediket is.

current_user_id - Hidden field

Az első rejtett meződ nevezd el current_user_id a field value-t pedig állítsd Current User ID-ra. A Render In HTML hagyd bekapcsolva.

inserted_cct_id - Hidden field

A soron következő rejtett meződ nevezd el inserted_cct_id-re, és állítsd a Field value-t Manual Input-ra. A Render In HTML hagyd bekapcsolva.

Emlékeztető! A php kódban amit fentebb átírtunk, ezt a(z) inserted_cct_id köti össze, így ha azt átírtad, akkor ugyan arra nevezd el ezt a rejtett meződ!

post_id - Hidden field

A harmadik rejtett meződet nevezd el post_id-re, és állítsd a Field value-t Current Post ID-re. A Render In HTML hagyd bekapcsolva.

post_title - Hidden field (opcionális)

Ha szeretnéd akkor egy negyedik mezőt is hozzáadhatsz post_title néven. Itt a field value-t Current post title-re kell állítanod. A Render In HTML hagyd bekapcsolva.

CCT Meták

A nehezén lassan túl vagyunk. Most már csak azokra a mezőkre van szükséged, amiket a CCT-nél létrehoztál.

Post submit Actions

Az utolsó előtti lépés, hogy meghatározzuk az űrlapnak mi történjen ha valaki rákattint a submit gombra. Először az Insert/update Custom Content Type item re lesz szükséged.

https://peldaweboldal.hu
JetEngine - JFB CCT Upload Action

Itt beállítod melyik CCT, státusz, továbbá összekapcsolod a CCT metáidat. Egyetlen rejtett mezőt sem kell beállítanod, kivéve a post_title, HA csináltál egy ennek megfelelő metát a CCT-ben.

Felmerül a kérdés, miért ennyire körülményes ez a feladat. A Custom Content Type egy másfajta sturktúrában menti az adatokat az adatbázisban, ezért mérföldekkel gyorsabb és hatékonyabb a Custom Post Typeokkal szemben. Míg két cpt relations összekötése a JetFormbuilder-ben kód mentesen, és könnyebben megoldható a CCT speciális kialakítást igényel.

Post Submit actions - Számít a sorrend?

Igen. Fontos a megfelelő sorrendbe állítani a műveleteket. Például egy Redirect to page-t javasolt hogy a legutolsó művelet legyen.

A következő művelet amit hozzá kell adnod: Connect Relation Items. Az összekapcsolás valójában itt fog végrehajtódni.

A Relation mezőbe válaszd ki a korábban létrehozott Relation-t. A PARENT ITEM ID -be a post_id nek elnevezett rejtett meződet válaszd ki. A CHILD ITEM ID mezőbe pedig az inserted_cct_id kell kiválasztanod. Az utolsó UPDATE CONTEXT-nél pedig a We updating parent items for the child object kell választanod.

https://peldaweboldal.hu
JetEngine - JFB CCT Upload Action

Űrlap beágyazása

Az utolsó, amire szükséged van, hogy ezt az űrlapot beágyazd a Custom Post Type Single sablonod oldalába. Innentől kezdve amikor valaki kitölti az űrlapot az adott post-on belül, létrehoz egy CCT Itemet, és hozzáköti a (cpt)post-hoz.

Query Builder

Sok esetben szükségünk van arra, hogy ezeket a beküldött CCT itemeket megjelenítsük annál a cpt Post-nál, ahol ment a beküldés. (submit) Az alábbi módon tudunk lekérdezést csinálni hozzá a Query Builderben:

Mivel CCT akarsz megjeleníteni azzal kell kezdened miután az Add new gombra kattintottál a Query Builder menüben, hogy a Query Type-ot Custom content Type Query-ra állítod. A From Content Type itt kiválasztod a CCT amivel eddig dolgoztunk továbbá a Number mezőbe írj egy számot ha nem akarod, hogy végtelen számú CCT jelenjen meg egyszerre. Lejebb a Query résznél pedig az Add new gombra kattintunk.

Field - Item ID
Compare - Equal

Value - Ennek a mezőnek van egy szürke dinamikus címke ikonja a jobb oldalon, arra kell kattintanod. Az itt megjelenő listából válaszd ki a Related Items

https://peldaweboldal.hu
JetEngine - Custom Content Type összesítő

A következő felugró ablakban szintén kikell választani a From Relation-t, From Object( - Child Object), Initial Object ID From(Current Object ID)

Eltérő Relations felépítés

Az itt leírt beállítás csak akkor működik, ha ugyan ezt a kapcsolati felépítést, és metódusokat követted. Más esetben a related item beállításait igazítanod kell a te felépítésedhez.