Jak jest jest budowana klasa dla tagu body? Jak to wykorzystać i jak zmienić? Co można na tym zyskać, a co stracić i właściwie do czego jest to potrzebne?
Skąd się właściwie bierze atrybut class w tagu body?
Prawidłowo skonstruowany szablon WordPressa, oprócz kilku innych elementów, zawiera też w otwierający tagu body poniższy kod, który to odpowiedzialny jest za atrybut class tegoż tagu.
<body <?php body_class($class); ?>>
Nasz CMS umieszcza tam odpowiednie klasy, w zależności od tego gdzie w serwisie się znajdujemy. Z samych nazw klas, oto niektóre z nich: home, category, page, single-format-standard, logged-in, można ustalić w drugą stronę: co jest aktualnie wyświetlane.
Do czego to wszystko? Dość często wykorzystuję klasę z body do zmiany wyglądu bloga, podpinając odpowiednie reguły w css:
Jak to wykorzystać bardziej…?
Następnym etapem wykorzystywania możliwości funkcji body_class1 jest filtr2 o takiej samej nazwie i tutaj mamy prawie całkowitą kontrolę nad tym jakie klasy pojawią się w rezultacie na stronie. Możemy dodawać, usuwać i modyfikować zawartość. Dlaczego prawie? Bo nasz filtr nie musi być ostatni.
Argumentem wejściowym jest tablica zawierająca wszystkie klasy które do tej pory stworzył sam system. Tu należy uważać, ponieważ zwracać MUSIMY tablicę.
Poniży listing zawiera kilka prostych przykładów użycia filtra3:
dodanie klasy dla wybranej kategorii
dodanie klasy związanej z dniem tygodnia
dodanie klasy związanej z godziną
dodanie klasy typu dzień/noc
usunięcie klas związanych z kategorią
W podobny sposób można dodawać lub usuwać inne klasy.
Co natomiast zostanie zrobione w arkuszach stylów, choćby inny szablon dla dnia inny dla nocy, pozostawię już waszej inicjatywie.
add_filter( 'body_class', 'iworks_snippet_body_class_filter');
function iworks_snippet_body_class_filter( $class )
{
/**
* nadawania określonej klasy dla ustawionej w opcjach kategorii
*/
if ( get_option( 'feature-category' ) && is_category( get_option( 'feature-category' ) ) ) {
$class[] = 'category-feature';
}
/**
* nadawanie klasy związanej z dniem tygodnia
*/
$class[] = sprintf( 'day-%s', strtolower( date ( 'l' ) ) );
/**
* nadawania klasy związanej z godziną
*/
$class[] = sprintf( 'hour-%d', date( 'H' ));
/**
* klasa dzień/noc
*/
$class[] = ( date( 'G' ) > 8 && date( 'G' ) < 20 )? 'is-day':'is-night';
/**
* usuwanie klasy kategorii
*/
if ( is_category() ) {
for( $i = 0; $i < count( $class ); $i++ ) {
if ( preg_match( '/^category/', $class[$i] ) ) {
unset( $class[$i] );
}
}
}
return $class;
}
pobierz plik: iworks-body_class-filter.php
Inne przykłady
Dodanie klasy „class_sidebar” jeżeli na stronie jest używany sidebar o nazwie „my_sidebar”:
add_filter('body_class','iworks_body_class_has_sidebar');
function iworks_body_class_has_sidebar( $class )
{
if (is_active_sidebar('my_sidebar')) {
$class[] = 'class_sidebar';
}
return $class;
}
Jak użyć podany kod?
Masz 3 rozwiązania:
wrzuć załączony plik do folderu wp-content/plugins, a potem włącz wtyczkę
wrzuć załączony plik do folderu wp-content/mu-plugins
dołącz kod do pliku functions.php aktualnie używanego motywu
Comments