Nie zawsze, korzystając z szablonów klasycznych, chcemy bawić się w dynamic-sidebary albo nav-walkery. Czasami potrzebujemy własnego menu, w tym funkcji, która odpowiednio stworzy link do kategorii podanej po slugu (bo na localhoście i już zahostowanej wersji mamy inne ID). Napiszemy sobie taką funkcję.
W internecie znaleźć możemy taką funkcję:
function wpse_get_category_url_by_slug( $category_slug ) {
return get_category_link( get_cat_ID( $category_slug ) );
}
Problem z internetem jest taki, że jakość jest dyskusyjna. Niedawno szukałem (na ogólnie przyzwoitej stronie) algorytmu bubble sort w PHP. Dostałem algorytm, który nie jest in-place (zaś przykład zastosowania taki, jakby nim był choć w oczy kłuje return). No cóż…
Funkcja get_cat_ID gubi się, gdy slugi są dłuższe, niż jeden wyraz. Aby napisać funkcję catlink musimy znaleźć inny sposób, aby slug zamienić na ID kategorii i przekazać do get_category_link.
Ten sposób, to funkcja get_term_by, bardzo użyteczna i godna polecenia:
function the_catlink($slug) {
echo esc_url(get_category_link(get_term_by('slug', $slug, 'category')->term_id));
}
Ta funkcja zwraca obiekt Term, a zatem musimy tam id wyłuskać po strzałce. Esc_url dla bezpieczeństwa. Echo dla konwencji, jeżeli chcemy returna powinniśmy nazwać naszą funkcję zaczynając od get:
function get_catlink($slug) {
return esc_url(get_category_link(get_term_by('slug', $slug, 'category')->term_id));
}