Uvod
Taksonomija je termin koji se idnosi na klasifikaciju i organizaciju. U wordpresu klasifikacija tj. taksonomija se svodi na kategorije i tag-ove. Njihova jedina svrha je sortiranje sadržaja radi poboljšanja njegove korisnosti. Da korisnik sajta može jednostavno pregledati sadržaj po temama, radije nego pretraživati na hronološki način na koji su blogovi bili na početku organizovani.
Termin wordpress custom taxonomy (srp. posebna taksonomija) je najčešće vezan za Custom post type jer je bitno da se pri korišćenju custom post tipova ne pojavljuju taksonomije koje se koriste za standardne postove i obrnuto.
Kategorije
Kategorije su namenjene za uopšteno grupisanje vaših postova. Smatrajte ih kao generalnu tematiku ili pregled sadržaja vašega sajta. Kategorije su tu da pomognu identifikovanju tematike vašeg bloga i pomognu čitaocima u pronalaženju odgovarajućeg tipa sadržaja. Kategorije su hijerarhijske, pa možete imati i pod-kategorije. Svaki post mora biti kategorisan, ukoliko korisnik ne ubaci post u kategoriju onda mu wordpress sam dodaje kategoriju uncategorized.
Tagovi
Tagovi su namenjeni da opišu specifične detalje o postovima. Možemo ih opisati kao indeks reči sajta, to su mikro podaci za kategorisanje sadržaja na mikro nivou. Tagovi nisu hijerarhijski. Za razliku od kategorija gde je kategorisanje postova obavezno, tagove niste u obavezi da dodajete.
Funkcija register_taxonomy()
Ova funkcija služi za registrovanje novih taksonomija i ažuriranje teksta u interfejsu vezanog za novu taksonomiju.
1 |
register_taxonomy( $taxonomy, $object_type, $args ) |
$taxonomy
je ime koje koristi wordpress tzv. machine name, ne sme sadržati velika slova ili spaces
$object_type je ime objekta za koji se pravi nova taxonomija tj. ime custom post type-a
$args je niz argumenata koji definišu novu taksonomiju.
Neki argumenti koji se često koriste su:
- label je naziv (u množini) koji se pojavljuje na admin stranici spremno za prevodjenje
- labels je niz su nazivi koji se koriste u toj vrsti custom post-a
- ‘name’ – general name for the taxonomy, usually plural. The same as and overridden by $tax->label. Default is _x( ‘Post Tags’, ‘taxonomy general name’ ) or _x( ‘Categories’, ‘taxonomy general name’ ). When internationalizing this string, please use a matching your post type. Example: _x(‘Writers’, ‘taxonomy general name’);
- ‘singular_name’ – name for one object of this taxonomy. Default is _x( ‘Post Tag’, ‘taxonomy singular name’ ) or _x( ‘Category’, ‘taxonomy singular name’ ). When internationalizing this string, please use a matching your post type. Example: _x(‘Writer’, ‘taxonomy singular name’);
- ‘menu_name’ – the menu name text. This string is the name to give menu items. If not set, defaults to value of name label.
- ‘all_items’ – the all items text. Default is __( ‘All Tags’ ) or __( ‘All Categories’ )
- ‘edit_item’ – the edit item text. Default is __( ‘Edit Tag’ ) or __( ‘Edit Category’ )
- ‘view_item’ – the view item text, Default is __( ‘View Tag’ ) or __( ‘View Category’ )
- ‘update_item’ – the update item text. Default is __( ‘Update Tag’ ) or __( ‘Update Category’ )
- ‘add_new_item’ – the add new item text. Default is __( ‘Add New Tag’ ) or __( ‘Add New Category’ )
- ‘new_item_name’ – the new item name text. Default is __( ‘New Tag Name’ ) or __( ‘New Category Name’ )
- ‘parent_item’ – the parent item text. This string is not used on non-hierarchical taxonomies such as post tags. Default is null or __( ‘Parent Category’ )
- ‘parent_item_colon’ – The same as parent_item, but with colon : in the end null, __( ‘Parent Category:’ )
- ‘search_items’ – the search items text. Default is __( ‘Search Tags’ ) or __( ‘Search Categories’ )
- ‘popular_items’ – the popular items text. This string is not used on hierarchical taxonomies. Default is __( ‘Popular Tags’ ) or null
- ‘separate_items_with_commas’ – the separate item with commas text used in the taxonomy meta box. This string is not used on hierarchical taxonomies. Default is __( ‘Separate tags with commas’ ), or null
- ‘add_or_remove_items’ – the add or remove items text and used in the meta box when JavaScript is disabled. This string is not used on hierarchical taxonomies. Default is __( ‘Add or remove tags’ ) or null
- ‘choose_from_most_used’ – the choose from most used text used in the taxonomy meta box. This string is not used on hierarchical taxonomies. Default is __( ‘Choose from the most used tags’ ) or null
- ‘not_found’ (3.6+) – the text displayed via clicking ‘Choose from the most used tags’ in the taxonomy meta box when no tags are available and (4.2+) – the text used in the terms list table when there are no items for a taxonomy. Default is __( ‘No tags found.’ ) or __( ‘No categories found.’ )
- public je opcija koja kontroliše vidljivost autorima i čitaocima sajta, i po default-u je true.
- show_ui (boolean) (optional) Whether to generate a default UI for managing this taxonomy. Default: if not set, defaults to value of public argument. As of 3.5, setting this to false for attachment taxonomies will hide the UI.
- show_in_menu (boolean) (optional) Where to show the taxonomy in the admin menu. show_ui must be true. Default: value of show_ui argument
- show_in_nav_menus (boolean) (optional) true makes this taxonomy available for selection in navigation menus. Default: if not set, defaults to value of public argument
- show_tagcloud (boolean) (optional) Whether to allow the Tag Cloud widget to use this taxonomy. Default: if not set, defaults to value of show_ui argument
- show_in_quick_edit (boolean) (optional) Whether to show the taxonomy in the quick/bulk edit panel. (Available since 4.2) Default: if not set, defaults to value of show_ui argument
- show_admin_column (boolean) (optional) Whether to allow automatic creation of taxonomy columns on associated post-types table. (Available since 3.5) Default: false
- description (string) (optional) Include a description of the taxonomy. Default: “”
- hierarchical (boolean) (optional) Is this taxonomy hierarchical (have descendants) like categories or not hierarchical like tags. Default: false
- rewrite (boolean/array) (optional) Set to false to prevent automatic URL rewriting a.k.a. “pretty permalinks”. Pass an $args array to override default URL settings for permalinks as outlined below: Default: true
- ‘slug’ – Used as pretty permalink text (i.e. /tag/) – defaults to $taxonomy (taxonomy’s name slug)
- ‘with_front’ – allowing permalinks to be prepended with front base – defaults to true
- ‘hierarchical’ – true or false allow hierarchical urls – defaults to false
- ‘ep_mask’ – (Required for pretty permalinks) Assign an endpoint mask for this taxonomy – defaults to EP_NONE. If you do not specify the EP_MASK, pretty permalinks will not work.
- capabilities (array) (optional) An array of the capabilities for this taxonomy. Default: None
- capabilities (array) (optional) An array of the capabilities for this taxonomy. Default: None
- ‘manage_terms’ – ‘manage_categories’
- ‘edit_terms’ – ‘manage_categories’
- ‘delete_terms’ – ‘manage_categories’
- ‘assign_terms’ – ‘edit_posts’
- sort (boolean) (optional) Whether this taxonomy should remember the order in which terms are added to objects. Default: None
Primeri pravljenja taksonimija
U narednim primerima se pravi nova taksonomija za custom_post_type “book”.
Primer br.1
Osnovni primer korišćenja ove funkcije:
1 2 3 4 5 6 7 8 9 10 11 12 |
function create_book_tax() { register_taxonomy( 'genre', 'book', array( 'label' => __( 'Genre' ), 'rewrite' => array( 'slug' => 'genre' ), 'hierarchical' => true, ) ); } add_action( 'init', 'create_book_tax' ); |
Primer br.2
Primer hijerarhiske taksonomije.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
function create_book_taxonomies() { $labels = array( 'name' => _x( 'Genres', 'taxonomy general name' ), 'singular_name' => _x( 'Genre', 'taxonomy singular name' ), 'search_items' => __( 'Search Genres' ), 'all_items' => __( 'All Genres' ), 'parent_item' => __( 'Parent Genre' ), 'parent_item_colon' => __( 'Parent Genre:' ), 'edit_item' => __( 'Edit Genre' ), 'update_item' => __( 'Update Genre' ), 'add_new_item' => __( 'Add New Genre' ), 'new_item_name' => __( 'New Genre Name' ), 'menu_name' => __( 'Genre' ), ); $args = array( 'hierarchical' => true, 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'genre' ), ); register_taxonomy( 'genre', array( 'book' ), $args ); } add_action( 'init', 'create_book_taxonomies', 0 ); |
Primer br.3
Primer taksonomije koja nema hijerarhisku strukturu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
function create_book_taxonomies() { $labels = array( 'name' => _x( 'Writers', 'taxonomy general name' ), 'singular_name' => _x( 'Writer', 'taxonomy singular name' ), 'search_items' => __( 'Search Writers' ), 'popular_items' => __( 'Popular Writers' ), 'all_items' => __( 'All Writers' ), 'parent_item' => null, 'parent_item_colon' => null, 'edit_item' => __( 'Edit Writer' ), 'update_item' => __( 'Update Writer' ), 'add_new_item' => __( 'Add New Writer' ), 'new_item_name' => __( 'New Writer Name' ), 'separate_items_with_commas' => __( 'Separate writers with commas' ), 'add_or_remove_items' => __( 'Add or remove writers' ), 'choose_from_most_used' => __( 'Choose from the most used writers' ), 'not_found' => __( 'No writers found.' ), 'menu_name' => __( 'Writers' ), ); $args = array( 'hierarchical' => false, 'labels' => $labels, 'show_ui' => true, 'show_admin_column' => true, 'update_count_callback' => '_update_post_term_count', 'query_var' => true, 'rewrite' => array( 'slug' => 'writer' ), ); register_taxonomy( 'writer', 'book', $args ); } add_action( 'init', 'create_book_taxonomies', 0 ); |
Treba pomenuti i online “Taxonomy generator” za neke brze hakove !
Podaci zakačeni za taksonomiju
Za svaki termin taksonomije je vezan specifičan skup podataka. U WordPress-u su to:
- Ime
- Slug
- Roditelj
- Opis
Ali ako želimo da sačuvamo više od tih defaultnih podataka kao što je slika uz neki termin taksonimije možemo koristiti plugin “Taxonomy Metadata”
Šabloni za taksonomije
Hijerarhija za custom taksonomije izleda ovako:
- taxonomy-{custom taxonomy}-{term}.php
- taxonomy-{custom taxonomy}.php
- taxonomy.php
- archive.php
- index.php
Objašnjenje kroz primer
Npr. custom taksonomija je žanr koja se koristi kod custom post tipa “Filmovi”, a termini koji su korišćeni npr. “Akcioni”, “Horor” ili “SF”.
Za prikaz filmova za jedan termin npr. “Akcioni” wordpress će se prvo tražiti šablon taxonomy-žanr-akcioni.php pa tek ako ne postoji taj šablon onda taxonomy-žanr.php.
Za prikaz svih termina ubačenih pod taksonomijom “žanr” wordpres će prvo potražiti šablon taxonomy-žanr.php.
Prikazivanje taxonomija
Lista termina
Za listanje termina taksonomije možemo koristi funkciju get_terms() koja samo daje listu (ne i link) svih termina u taxonomiji sa sledećim kodom:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php // Get a list of all terms in a taxonomy $terms = get_terms( "genre", array( 'hide_empty' => 0, ) ); $genres = array(); if ( count($terms) > 0 ): foreach ( $terms as $term ) $genres[] = $term->name; $genres_str = implode(', ', $genres); ?> <h2>Zanrovi</h2> <p>Ovo je spisak svih zanrova: <?php echo $genres_str; ?>.</p> <?php endif; ?> |
Izlaz izgleda ovako: Ovo je spisak svih zanrova: Akcioni, Horor, SF.
Lista linkova termina
Za izlistavanje spiska termina (kao linkova) korišćenih kod neke takosonomije se koristi template tag funkcija wp_list_category(). Nakon klika na neki link prikazaće odgovarajuću stranicu sa svim članovima nekog custom post tipa koji imaju taj termin.
Na sledećem primeru se izlistava spisak svih terms koji su korišćeni kod custom taksonomije za žanr filma. Ovaj kod treba ubaciti u odgovarajući šablon gde želimo da se pojavi.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$genre_list = wp_list_categories( array( 'taxonomy' => 'genre', 'orderby' => 'name', 'show_count' => 0, 'pad_counts' => 0, 'hierarchical' => 1, 'echo' => 0, 'title_li' => '<h1>Zanrovi filma:</h1>' ) ); // Make sure there are terms with articles if ( $genre_list ) echo '<ul class="genre-list">' . $genre_list . '</ul>'; |
Rezultat bi bio lista linkova:
- Horor
- SF
- Akcija
Lista preko custom petlje
Sledeći primer može da se iskoristi za pravljenje šablona archiva.php koji će da izlistava sve naslove custom post tipa “movie” a koji koriste taksonomiju “ganre” i čiji je termin “SF”, tako što se zameni standardni loop sa ovim:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php $genres_query = new WP_Query( array( 'post_type' => 'movie', 'posts_per_page' => 10, 'tax_query' => array( array( 'taxonomy' => 'genre', 'field' => 'slug', 'terms' => 'sf' ) ) ) ); // Display the custom loop if ( $genres_query->have_posts() ): ?> <h1>Lista filmova SF žanrom:</h1> <ul class="postlist"> <?php while ( $genres_query->have_posts() ) : $genres_query->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php endwhile; wp_reset_postdata(); ?> </ul><!--// end .postlist --> <?php endif; ?> |
Taxonomy claud
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $genres_cloud = wp_tag_cloud( array( 'taxonomy' => 'genre', 'echo' => 0 ) ); // Make sure there are terms with articles if ( $genres_cloud ): ?> <h2>Filmovi po zanrovima:</h2> <div class="genres-cloud"> <?php echo $genres_cloud; ?> </div> <?php endif; ?> |
Ispisivanje termina taxonomije na način gde veličina ispisivanja svakog taga zavisi od toga koliko puta je taj odredjeni termin tagovan za neki post se naziva “tag cloud”. Za to ćemo koristiti WP funkciju wp_tag_cloud().