Amikor feltelepítjük a WordPress-t csak három beépített tartalom típust kapunk: bejegyzések, oldalak és média. Azonban mára a WordPress meglehetősen flexibilissé és fejletté vált, így lehetőség nyílik Custom Post Type-ok létrehozására.
Bár első mondatban felvázolt bőven elegendő egy bloghoz, de a változatos és a mai leggyakoribb igények kiszolgálásához alap bejegyzéstípusok sokszor nyújtanak elég szabadságot, és itt jön a képbe a Custom Post Type fogalma.
Mi az a WordPress Custom Post Type?
A Custom Post Type-ok segítségével mutatja meg a WordPress az igazi erejét és válik egy igazi tartalomkezelő rendszerré. Ahogy a név is sugallja a segítségéve egyedi tartalomtípusokat hozhatunk létre.
Bár a cikk bevezetőjében azt mondtam, hogy alapjáraton háromféle tartalomtípussal jön a WordPress, ez így nem teljesen igaz. Három tartalomtípus van, amit látunk, de a motorháztető alatt több Post Type-al is dolgozik a rendszer:
- Post – főleg blogbejegyzésekhez használhatóak
- Page – statikus oldalak
- Revision – a fentiek változásait tárolja több verzióban
- Navigation – navigációs menük
- Attachment – leggyakrabban a képekhez készül automatikusan
Ezekről továbbiakban nem is ejtenék szót, de a teljesség kedvéért felsoroltam őket. Ha érdekelnek bővebben akkor a custom post type rész dokumentációját a WordPress hivatalos oldalán.
A WordPress nem limitálja a létrehozható Custom Post Type-ok számát, ráadásul a bennük lévő bejegyzések száma is korlátlan. Így az alap Post Type-okat kibővíthetjük mondjuk egy portfolió, vagy vélemények elemmel, amiket aztán akárhol listázhatunk a weboldalon.
Készítsünk Custom Post Type-ot a WordPress-hez
Több módja is van annak, hogy egyedi tartalomtípust hozzunk létre, az egyik legegyszerűbb a CPT UI nevű bővítmény. Ezzel a minden apró részletet beállíthatunk, és megadhatjuk az összes tulajdonságot.
De ehhez egy külön plugint kellett telepíteni, amit könnyedén ki is tudunk kerülni egy kis kódolással. Ez azért jó, mert nem kell erőforrást áldoznunk a plugin futtatására, és nem hagyunk plusz biztonsági rést egy esetleges frissítés csúszásáért.
Jelenleg a Custom Post Type készítésének legegyszerűbb megközeléítését fogom bemutatni így a functions.php-ban fogunk dolgozni.
Adjuk is hozzá az alábbi kódot a functions.php aljához:
/* Custom Post Type Start */
function weart_create_posttype() {
register_post_type( 'news',
// beállítások
array(
'labels' => array(
'name' => __( 'Referenciak' ),
'singular_name' => __( 'Referencia' )
),
'public' => true,
'has_archive' => false,
'rewrite' => array('slug' => 'referenciak'),
)
);
}
// Hook a WordPress-hez
add_action( 'init', 'weart_create_posttype' );
/* Custom Post Type End */
A kód hozzáadása után a Referencia Post Type automatikusan megjelenik a WordPress admin felületen. Ebben a menüpontban pontosan ugyanúgy fogod tudni kezelni a bejegyzéseket mintha a beépített Bejegyzések menüpontot használnád.
Az alábbi képen láthatod hogyan fog kinézni:
Amikor egyedi tartalomtípust hozunk létre mindenképpen egy init
-es add_action()
hook segítségével kell megtennünk, amiben egy register_post_type()
függvényt hívunk meg a megfeleló argumentumokkal.
Én ezeket a fenti példában összevontam és csak a legszükségesebbeket állítottam be, de lehetőség van sokkal több beállítás megadására is:
/*Custom Post type start*/
function weart_post_type_referencia() {
// támogatott postelemek
$supports = array(
'title', // cím
'editor', // tartalom
'author', // szerző
'thumbnail', // kiemelt kép
'excerpt', // kivonat
'custom-fields', // custom fields
'comments', // hozzászólások
'revisions', // tárolt változatok
'post-formats', // formátumok (kép,idézet, video...)
);
$labels = array(
'name' => _x('referenciak', 'plural'),
'singular_name' => _x('referencia', 'singular'),
'menu_name' => _x('referenciak', 'admin menu'),
'name_admin_bar' => _x('referenciak', 'admin bar'),
'add_new' => _x('uj hozzaadasa', 'add new'),
'add_new_item' => __('uj referencia hozzaadasa'),
'new_item' => __('uj referencia'),
'edit_item' => __('referencia szerkesztese'),
'view_item' => __('megnézem az elemet'),
'all_items' => __('minden referencia'),
'search_items' => __('referencia keresése'),
'not_found' => __('nem talalhato referencia.'),
);
$args = array(
'supports' => $supports,
'labels' => $labels,
'public' => true,
'query_var' => true,
'rewrite' => array('slug' => 'referenciak'),
'has_archive' => true,
'hierarchical' => false,
);
register_post_type('referencia', $args);
}
add_action('init', 'weart_post_type_referencia');
/*Custom Post type end*/
Én ezeket a fenti példában összevontam és csak a legszükségesebbeket állítottam be, de lehetőség van sokkal több beállítás megadására is:
- $supports: Azok az elemek amik támogatottak lesznek a Post Type-ban.
- $labels: Milyen feliratokkal jelenjen meg a tartalomtípus? Én a példában nem csináltma fordíthatóra, de természetesen többnyelvűsíthetőek a feliratok.
- $args: Megadhatjuk a menü pozicióját és egyéb beállításait.
Ha mindent jól csináltunk akkor jelen pillanatban ott tartunk, hogy van egy működő egyedi tartalomtípusunk, ami pontosan úgy viselkedik, mint egy „gyári” tartalomtípus. Nem mellesleg eddig a pontig tudtunk volna eljutni kódolás nélkül a CPT UI plugin használatával is.
Listázzuk ki a Custom Post Type-okat
Innentől már csak az a dolgunk, hogy hozzáadjunk tartalmakat majd megjelenítsük azt a sablonunkban.
Alapjáraton a legtöbbször nem tartalmi oldalakat, tehát nem új bejegyzéseket akarunk létrehozni, hanem egy listát szeretnénk az egyedi tartalmainknak. Persze egy archívum oldal alapból képződik hozzájuk, jelen esetben:
domain.hu/referenciak
A lényeg azonban az lenne hogy ott jelenítsük meg egy loop segítségével ahol csak szeretnénk. A mostani Referenciás példában is egy listát szeretnék megjeleníteni a referenciáimmal, amiben van egy kép és egy név.
Szerencséra akárhol megjeleníthetjük őket egy egyszerű wp_query
-vel.
<?php
$args = array(
'post_type' => 'referenciak',
'posts_per_page' => 10
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<div class="entry-content">
<?php the_excerpt(); ?>
</div>
<?php endwhile; wp_reset_postdata();
endif;
?>
Egyedi kinézet az egyedi tartalomhoz
Ha mégis szükség lenne arra, hogy egyesével is megjelenítsük őket egy külön sablondizájnnal, mert mondjuk egy esettanulmányt rejt a belseje, akkor csak létre kell hozni egy single-referenciak.php fájlt a gyökérkönyvtárban.
Ezt a WordPress alapból fel fogja ismerni, és használni fogja a Referencia Post Type megjelenítéséhez. Különleges kódot nem igényel, úgy kell vele bánni, mintha egy sima single.php fájlt programoznánk.
Összefogalva
Most, hogy megtanultuk a Custom Post Type-ok használatát a WordPress-ben számottevően komplexebb oldalakat tudunk majd készíteni, amik nem mellesleg sokkal jobban struktúráltak.
Sokkal összetettebb megjelenést tudunk készíteni, amellett, hogy a weboldal szerkesztőjét nem terheljük feleslegesen új funkciók megtanulásával. Az Ő szemszögéből ugyanis nem történik változás a szerkesztő használatában, hiszen ugyanazt a bejegyzésszerkesztőt fogja használni, amit eddig is megszokott.
Tipp: Ügyeljünk rá, hogy ezeket az egyedi tartalomtípusokat a sablonunkhoz rendeltük, ami sablonváltáskor okozhat zavarokat. Érdemes elhet egyedi pluginbe kiszervezni őket hogy elkerüljük ezeket a kellemetlenségeket.
Szólj hozzá!