Deși este convenabil să se folosească un simplu identificator tip de postare personalizată, cum ar fi produs, care este în concordanță cu identificatorii tipurilor de postare implicite (post, page, revision, attachment și nav_menu_item), este mai bine să adăugați un prefix la identificator cu un scurt nume, care identifică modulul, tema sau site-ul care implementează tipul de postare personalizată.
De exemplu:
- acme_product sau aw_product pentru produsele din tipul de postare utilizat de un site web ipotetic ACMEWidgets.com.
- eightfold_product sau eft_product pentru produsele din tipul de postare furnizate de o temă ipotetică EightFold.
- ai1m_product pentru produsele din tipul de postare furnizate de un ipotetic modul All-in-One Merchant.
Fără adăugarea numelui la identificatorul tipului de postare personalizată, alte tipuri de postări din site vor intra probabil în conflict cu tipurile de postări personalizate definite într-o temă pe care vrei să o folosești ulterior sau un modul de care îți dai seama că ai absolută nevoie. Sau, dacă dezvolți tipuri de poastare personalizate sau teme, există o șansă mult mai mare ca modulul sau tema respectivă să intre în conflict cu tipuri de postare personalizate definite în alte module sau teme. Numele adăugat la identificatorul tipului de postări personalizate nu va garanta lipsa conflictelor dar va reduce cu siguranță probabilitatea lor.
Acordați o atenție deosebită ideii ca identificatorul tipului de postare personalizată să nu depășească 20 de caractere, întrucât coloana post_type în baza de date este în prezent un câmp VARCHAR de acea lungime.
Identificatori rezervați pentru tipul de postare
Desi echipa de dezvoltare a nucleului nu a luat încă o decizie finală în această privință, a fost propusă pe lista de discuții wp-hackers ca viitorii identificatori ai tipului de postare pentru nucleu să aibă prefixul wp_, adică în cazul în care echipa de bază decide să adauge un tip de postare eveniment atunci în conformitate cu această sugestie ar folosi identificatorul wp_event. Chiar dacă acest lucru nu a fost finalizat, acesta va fi o idee bună pentru a evita orice tip de postare personalizată a cărei identificator începe cu wp_.
Ecrane pentru tipuri de mesaje personalizate
(sau Cum se adaugi postări personalizate)
Când un tip de postare personalizată este creat ca în exemplul de mai sus, acesta obține un nou meniu de administrare de nivel superior pentru a crea și a gestiona tipul nou de postare. Noile ecrane de administrare vor fi accesibile din acest meniu, precum ecranul de editare a postării în cazul unde există un editor complet de postare și toate caracteristicile stabilite care vin odată cu acest tip de postare personalizată care treebuiesc suportate prin argumentul support al funcției register_post_type(). Puteți personaliza ecranele cu cârlige de acțiune și de filtrare.
URL-uri
Un tip de postare personalizată va primi, de asemenea, propria său slug în structura URL-ului site-ului. În exemplul de mai sus, o postare de acest tip de postare personalizată de produs poate fi afișată la http://example.com/acme_product/%product_name% unde acme_product este slugul tipului de postare personalizată și %product_name% este slugul unui anumit produs, astfel încât o legătură permanentă ar putea fi, de exemplu, http://example.com/product/foobrozinator. Puteți vedea această legătură permanentă apărând pe ecran de editare pentru tipul de postare personalizată, la fel ca și tipurile de postare implicite.
URL-uri ale identificatorilor tipurilor de postare personalizată cu prefix
Când se adaugă prefix la identificatorul tipului de postare personalizată și se dorește în continuare utilizarea unei structură URL curate, trebuie să setați argumentul rewrite al funcției register_post_type(). De exemplu, considerând exemplul ACME Widgets de mai sus:
add_action( ‘init’, ‘create_posttype’ );
function create_posttype() {
register_post_type( ‘acme_product’,
array(
‘labels’ => array(
‘name’ => __( ‘Products’ ),
‘singular_name’ => __( ‘Product’ )
),
‘public’ => true,
‘has_archive’ => true,
‘rewrite’ => array(‘slug’ => ‘products’),
)
);
}
Cele de mai sus vor duce la adresele URL ale postărilor în forma http://example.com/products/%product_name%. Rețineți că am folosit un cuvânt la plural pentru slug aici, care este o formă pe care unii oameni o preferă, deoarece implică o adresă URL mai logică pentru o pagină care încorporează o listă de produse, și anume http://example.com/products/.
De asemenea, rețineți că, folosind aici un slug generic precum products poate potențial intra în conflict cu alte module sau teme care utilizează aceași slug, dar celor mai mulți oameni le-ar displace URL-uri mai lungi și mai obscure ca http://example.com/acme_products/foobrozinator și rezolvarea conflictului de URL între două module este mai ușor, pur și simplu pentru că structura URL-ului nu este stocată persistent în înregistrarea bazei de date pentru fiecare postare în același fel ca stocarea identificatorilor tipului de postare personalizată.
Șabloane pentru tipuri de postare personalizată
Sistemul de teme WordPress suportă, de asemenea, șabloane personalizate pentru tipuri de postare personalizate. Un șablon personalizat pentru o singură afișare a posturilor aparținând unui tip de postare personalizată este suportat începând cu WordPress Versiunea 3.0, iar suportul pentru un șablon particularizat pentru afișarea unei arhive începând cu versiunea 3.1.
Notă: În unele cazuri, structura legăturilor permanente trebuie actualizată pentru ca noile fișierele șablon să fie accesate când vizualizați mesaje de tip postare personalizată. Pentru aceasta, mergeți la Panou control > Setări > Legături permanente, schimbați structura legăturilor permanente la o structură diferită, salvați modificările, și schimbați-le înapoi la structura dorită.
Fișierele șablon
În același mod postările unice și arhivele lor pot fi afișate folosind fișierele șablon single.php și archive.php, respectiv,
- postări unice ale unui tip postare personalizată vor folosi single-{post_type}.php
- iar arhivele lor vor folosi archive-{post_type}.php
- și dacă nu aveți această pagină pentru arhiva tipului de postare puteți utiliza BLOG_URL?post_type={post_type}
unde {post_type} este argumentul $post_type al funcției register_post_type().
Deci, pentru exemplul de mai sus, ați putea crea fișierele șablon single-acme_product.php și archive-acme_product.php pentru postările unui singur produs și arhivele lor.
Alternativ, puteți utiliza funcția is_post_type_archive() în orice fișier șablon pentru a verifica dacă interogarea arată o pagină de arhivă a unui anumit tip de postare, și post_type_archive_title() pentru a afișa titlul tipului de postare.
Interogarea tipului de postare
În orice fișier șablon al sistemului de teme WordPress puteți crea, de asemenea, noi interogări pentru a afișa mesajele de la un tip de postare specific. Acest lucru se face prin intermediul argumentul post_type al obiectului WP_Query.
Exemplu:
$args = array( ‘post_type’ => ‘product’, ‘posts_per_page’ => 10 );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
the_title();
echo ‘<div class=”entry-content”>’;
the_content();
echo ‘</div>’;
endwhile;
Acest puri și simplu buclează prin ultimele 10 postări de produse și afișează titlul și conținutul lor, unul câte unul.
Tipuri de postări personalizate în principala interogare
Înregistrarea unui tip de postare personalizat nu înseamnă că se adaugă automat la interogarea principală.
Dacă doriți ca postările de tip postare personalizată să se afișeze pe arhivele standard sau să le includă pe pagina de start împreună cu alte tipuri de postare, utilizați cârligul de acțiune pre_get_posts.
// Arată postările tipurilor de postare „page” „post” și „film” pe pagina de start
add_action( ‘pre_get_posts’, ‘add_my_post_types_to_query’ );
function add_my_post_types_to_query( $query ) {
if ( is_home() && $query->is_main_query() )
$query->set( ‘post_type’, array( ‘post’, ‘page’, ‘movie’ ) );
return $query;
}
Referință de funcții
Tipuri de postare: register_post_type(), add_post_type_support(), remove_post_type_support(), post_type_supports(), post_type_exists(), set_post_type(), get_post_type(), get_post_types(), get_post_type_object(), get_post_type_capabilities(), get_post_type_labels(), is_post_type_hierarchical(), is_post_type_archive(), post_type_archive_title()
Traducere din wordpress.org
Lasă un răspuns