Tworzenie nowej taxonomii WordPress cz. 1

Taxonomia jest mechanizmem sortowania postów, domyślnie WordPress posiada cztery taksonomie, jednak w zależności od potrzeb można zdefiniować ich więcej. Artykuł ten ma na celu opisanie parametrów taxonomii tak, aby każdy mógł utworzyć dostosowaną do swoich potrzeb.

Wyróżniamy cztery domyślne taxonomie:
category – dzieli posty na kategorie (podział hierarchiczny, można tworzyć drzewo kategori z podkategoriami),
tag – dzieli posty na tagi (podział nie hierarchiczny, podobne do kategorii ale w wolnej formie, można je dodawać w każdym momencie, w każdym poście, wyświetlane są w formie chmury tagów),
link_category – kategoryzuje linki wewnętrzne w obrębie całej witryny (używane do definiowania grup linków np. w paskach bocznych),
post_format – zawiera meta informacje, które motywy mogą wykorzystywać do customowego wyświetlania postu (nie da się tworzyć ani dodawać do istniejących nowych formatów postów)

Istnieje możliwość stworzenia własnej taxonomii i dostosowania jej do indywidualnych potrzeb. Jest to tzw. „custom taxonomy”.

Rejestracja podstawowej taxonomii:

function people_init() {
register_taxonomy(
'people',
'post',
array(
'label' => __( 'People' ),
...
)
);
}
add_action( 'init', 'people_init' );

Parametry taxonomii:
$taxonomy – nazwa taxonomii może zawierać tylko małe litery oraz znak podkreślenia a jej długość nie może przekraczać 32 znaków (domyślnie: none, w powyższym przykładzie –  people),
$object_type – nazwa typu obiektu dla obiektu taxonomii (w powyższym przykładzie – post). Typ może być wbudowany (post, page, attachment, revision, nav_menu_item)  lub dodany przez użytkownika (custom post types – nazwa małymi literami bez spacji lub null – nie zawierający obiektów).
$args – tablica argumentów (w powyższym przykładzie – array)
Argumenty taxonomii:
label – nazwa taxonomii w liczbie mnogiej używana do tłumaczenia (domyślnie: $labels->name),
labels – tablica etykiet (domyślnie name = wartość label, a singular_name = wartość name)
name – nazwa taxonomii, przeważnie w liczbie mnogiej (domyślnie: _x( ‚Post Tags’, ‚taxonomy general name’ ) lub _x( ‚Categories’, ‚taxonomy general name’ )),
singular_name – nazwa pojedyńczego elementu taxonomii (domyślnie: _x( ‚Post Tag’, ‚taxonomy singular name’ ) lub _x( ‚Category’, ‚taxonomy singular name’ )),
menu_name – nazwa menu, używana też do nazywania pozycji menu (domyślnie wartość name),
all_items – tekst etykiety elementu: wszystkie pozycje (domyślnie __( ‚All Tags’ ) lub __( ‚All Categories’ )),
edit_item – tekst etykiety elementu: edytuj (domyślnie: __( ‚Edit Tag’ ) lub __( ‚Edit Category’ )) ,
view_item – tekst etykiety elementu: podgląd (domyślnie: __( ‚View Tag’ ) lub __( ‚View Category’ )),
update_item – tekst etykiety elementu: aktualizuj (domyślnie: __( ‚Update Tag’ ) lub __( ‚Update Category’ ),
new_item_name – tekst etykiety elementu: nazwa (domyślnie: __( ‚New Tag Name’ ) lub __( ‚New Category Name’ ),
parent_item – tekst etykiety elementu: nadrzędnego. Używany jest tylko dla hierarchicznych taxonomii  (domyślnie: pusty lub __( ‚Parent Category’ )),
parent_item_colon – tak samo jak parent_item, ale z dwukropkiem na końcu __( ‚Parent Category:’ ),
search_items – tekst etykiety elementu: szukaj (domyślnie: __( ‚Search Tags’ ) lub __( ‚Search Categories’ )),
popular_items – tekst etykiety elementu: popularne. Używany jest tylko dla nie hierarchicznych taxonomii (domyślnie: __( ‚Popular Tags’ ) lub null),
separate_items_with_commas – tekst etykiety elementu: oddziel elementy przecinkami w meta boxie taxonomii. Używany jest tylko dla nie hierarchicznych taxonomii  (domyślnie:__( ‚Separate tags with commas’ ), lub null ),
add_or_remove_items – tekst etykiety elementu: dodaj lub usuń elementy, używany w meta boxie taxonomii, gdy JavaScript jest wyłączony.  Używany jest tylko dla nie hierarchicznych taxonomii  (domyślnie:__( ‚Add or remove tags’ ), lub null ),
choose_from_most_used – używany w meta boxie taxonomii. Używany jest tylko dla nie hierarchicznych taxonomii (domyślnie:__( ‚Choose from the most used tags’ ), lub null ),
not_found – tekst wyświetlany, gdy w taxonomii nie ma elementów, czyli kategorii lub tagów (domyślnie:__( ‚No tags found.’ ), lub __( ‚No categories found.’),
public – parametr decydujący o tym czy taxonomia ma być widoczna, domyślnie: true,
show_ui – wyświetla panel do zarządzania taxonomią, domyślnie dla WordPressa 3.5 i wyższych wersji: false,
show_in_menu – widoczność taxonomii w menu admina, musi być ustawione na true,
show_in_nav_menus – wyświetla taxonomię na ekranie tworzenia menu, tak aby można było ją dodać jako pozycję w menu, domyślnie taxonomia jest ukryta,
show_tagcloud – dodanie widżetu Tag Cloud, aby można było z niego korzystać w tej taxonomii, jeśli nie jest ustawiony, domyślnie przyjmuje wartość argumentu show_ui,
show_in_quick_edit – wyświetla taxonomię w panelu szybkiej edycji postu, domyślnie przyjmuje wartość argumentu show_ui (opcja dostępna w wersjach WordPressa od werdji 4.2),
meta_box_cb – zwraca nazwę wyświetlanego meta-boxa, domyślnie: null,
show_admin_column – automatycznie tworzy kolumny dla dołączonych typów postów, domyślnie: false,
description – dodaje opis taxonomii, domyślnie jest pusty,
hierarchical – określa czy taxonomia jest hierarchiczna  jak np. kategorie (może zawierać podkategorie), lub niehierarchiczna jak tagi (domyślnie: false). W hierarchicznych taxonomiach w panelu admina w edycji postu znajduje się lista checkboxów, co daje możliwość wybrania, do jakich kategorii/podkategorii ma należeć wpis (jak w kategoriach), w niehierarchicznych mamy tylko puste pole, w które można wpisać frazę z którą ma być powiązany wpis (jak w tagach),
update_count_callback – funkcja jest wykonywana, gdy zmieni się liczba obiektów (np. postów w taxonomii) zwraca ilość obiektów w taxonomii (domyślnie: none),
wp_update_term_count_now() – zlicza wszystkie posty, kiedy wartość domyślna jest nie ustawiona,
_update_post_term_count() – jeśli taxonomia jest powiązana z typem postów, zliczane są tylko posty opublikowane (ze statusem publish) np. posty w konkretnej kategorii, dla własnych statusów oraz typów postów (gdy nie ma statusu publish) trzeba utworzyć funkcję zwrotną (callback) nie zawierającą klauzuli „post_status”,
_update_generic_term_count() – umożliwia zliczanie załączników powiązanych z kategorią (nie tylko znajdujących się w postach), daje to możliwość np. wyświetlenia wszystkich zdjęć należących do konkretnej kategorii

Przykład zliczania elementów przypisanych do wybranej kategorii:

// Aktualizacja licznika obiektów w kategorii
function change_category_arg() {
global $wp_taxonomies;
if ( ! taxonomy_exists('category') )
return false;

$wp_taxonomies['category']->update_count_callback = '_update_generic_term_count';
}
add_action( 'init', 'change_category_arg' );

// Dodanie kategorii taxonomii
function renaissance_add_categories_to_attachments() {
register_taxonomy_for_object_type( 'category', 'attachment' );
}
add_action( 'init' , 'renaissance_add_categories_to_attachments' );

query_var – określa parametry wyszukiwania (zapytań przez URL i bezpośrednich WP_Query), ustawienie wartości false wyłącza kryteria wyszukiwania, aby utworzyć swoje zapytanie należy ustawić query_var na wartość string. Domyślna wartość to $taxonomy, czyli nazwa taxonomii,
Uwaga: Pomimo ustawionej wartości false można użyć zapytania bezpośredniego np: WP_Query(array(‚taxonomy’=>’people’, ‚term’=>$person_name))do wyszukiwania postów.

rewrite – argument zmienia wybraną przez użytkownika sekcję linku (domyślnie: true), false zapobiega automatycznemu nadpisywaniu „ładnych linków”:
slug – zmiana nazwy taxonomii np. /tag/ można zastąpić dowolną frazą,
with_front – włącza lub wyłącza prefix (domyślnie: true). Przykładowo nazwa custom post type „blog” w url wyświetli się jako /archive-blog/, po ustawieniu wartości na false, wyświetli się /blog/,
hierarchical – włącza lub wyłącza hierarchiczne url (Dostępne od wersji 3.1, domyślnie: false). Przestawiając wartość na true uzyskamy kompletny url składający się ze wszystkich kolejnych podstron, które przeklikaliśmy aby otworzyć to co nas interesuje, w przeciwnym przypadku url jest skracany,
ep_mask – (wymagany dla opcji ładnych linków) włącza maskę dla taxonomii dołączając wybraną frazę po jej nazwie (domyślnie: EP_NONE), bez zdefiniowanego parametru funkcja ładnych linków nie zadziała.
Uwaga: Aby maska zadziałała, tóż po utworzeniu taxonomii należy w panelu admina wejść w Ustawienia -> Bezpośrednie odnośniki i nie zmieniając ustawień kliknąć zapisz zmiany, lub użyć $wp_rewrite->flush_rules(). druga metoda polega na dodaniu do pliku functions.php kodu:

global $wp_rewrite;
$wp_rewrite->flush_rules( false );

Uwaga: Gdy w parametrze zamiast false podamy true, lub pustą wartość, plik .htaccess zostanie bezpowrotnie nadpisany a poprzednia wersja utracona, dlatego należy na to uważać.

capabilities – opcje taxonomii (domyślnie: none):

sort – ustala kolejność, w jakiej warunki są dodawane do obiektów (domyślnie: none),

_builtin – ustawienie czy taxonomia ma być wbudowana, czy też nie (domyślnie: false). Generalnie używanie tego argumentu jest odradzane przy tworzeniu własnej taxonomii.

Wymaganymi parametrami przy tworzeniu własnej taxonomii są tylko: $taxonomy, $object_type, reszta jest opcjonalna.

W tej części artykułu opisałem taxonomię w teorii, druga część artykułu dotyczyć będzie praktycznego zastosowania opartego na przykładzie utworzenia nowej taxonomii.

Kategoria: Tagi: