Podstawowym elementem, który służy do zarządzania opcjami w ekranie personalizacji motywu jest kontrolka. Może to być pole tekstowe, lista wyboru lub bardziej złożony element jak np. pole wyboru koloru.
WordPress 4.0 wprowadził dużo usprawnień w tym temacie, dzięki czemu tworzenie rozbudowanych opcji stało się dużo wygodniejsze.
Tworzenie kontrolki
Kontrolki tworzymy poprzez metodę add_control, która ma dwa rodzaje wywołań – jedno i dwuargumentowe. Jeżeli korzystamy z podstawowych kontrolek to używamy wywołania z dwoma argumentami:
$wp_customize->add_control( 'nazwa_ustawienia', array( 'opcja' => 'wartość' ) );
Warto pamiętać, że przed stworzeniem kontrolki, powinniśmy najpierw zdefiniować ustawienie metodą add_setting – ustawienie jest ściśle związane z kontrolką poprzez pierwszy argument metody add_control. Tablica asocjacyjna z opcjami określa dodatkowe parametry kontrolki. Przykładowa tablica ustawień:
array( 'label' => 'Test option', 'description' => 'Test description', 'type' => 'text', 'section' => 'test', 'priority' => 0 );
Krótki opis poszczególnych parametrów:
- label – to etykieta kontrolki,
- description – opis kontrolki wyświetlany pod etykietą – dodany w WordPressie 4.0,
- type – rodzaj kontrolki,
- section – identyfikator sekcji do której zostanie przypisana kontrolka,
- priority – parametr służący do określania kolejności kontrolek w sekcji
Teoretycznie możliwe jest wykorzystanie jeszcze innego zapisu metody tworzącej kontrolkę:
$wp_customize->add_control( 'nazwa_kontrolki', array( … 'setting' => 'nazwa_ustawienia', … ) );
W powyższym wypadku pierwszy argument nie musi być powiązany z nazwą ustawienia – wtedy dowiązanie jest tworzone na bazie parametru setting.
Jeżeli zaś chodzi o jednoargumentowe wywołanie metody add_control, jest ono wykorzystywane przy bardziej złożonych kontrolkach oferowanych przez WordPressa oraz w wypadku tworzenia własnych kontrolek:
$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'text_color', array( 'label' => __('Text Color', 'mytheme'), 'section' => 'colors' ) ) );
Jedynym argumentem jest w tym wypadku instancja klasy tworzącej kontrolkę, która pobiera trzy argumenty:
- obiekt menadżera ekranu personalizacji,
- nazwę ustawienia (lub nazwę kontrolki, jeżeli korzystamy z parametru setting),
- tablicę asocjacyjną ustawień tak jak w wypadku dwuargumentowego wywołania metody add_control.
Dostępne rodzaje kontrolek
Do naszej dyspozycji mamy następujące typy kontrolek:
- text,
- textarea,
- radio (wymaga ona dodatkowego parametru choices),
- select (wymaga ona dodatkowego parametru choices),
- checkbox,
- dropdown-pages
Dodatkowo z kontrolek, które wykorzystują jednoargumentowe wywołanie metody add_control warto wymienić:
- WP_Customize_Color_Control,
- WP_Customize_Image_Control,
- WP_Customize_Upload_Control,
- WP_Customize_Background_Image_Control,
- WP_Customize_Header_Image_Control
Jeszcze więcej kontrolek
Jeżeli wcześniej wspomniane kontrolki nam nie wystarczają, to możemy skorzystać z faktu, że od WordPressa 4.0 możemy jako parametr type podać każdą wartość jaka jest obsługiwana przez atrybut type elementu input w HTML5.
Dodatkowo w parametrze input_attrs możemy podać tablicę asocjacyjną dodatkowych atrybutów, których może wymagać dany element:
$wp_customize->add_control( 'mytheme_layout_width', array( 'type' => 'range', … 'input_attrs' => array( 'min' => 720, 'max' => 1280, 'step' => 1 ) ) );
Oczywiście należy pamiętać o tym, że wiele z typów kontrolek ma bardzo ograniczone wsparcie, zatem może się okazać, że w wielu przeglądarkach po prostu nasze kontrolki nie wyświetlą się odpowiednio.
Proste modyfikacje kontrolek
Istniejące kontrolki możemy modyfikować na dwa sposoby – z poziomu PHP oraz poprzez kod CSS/JS.
W wypadku kodu PHP korzystamy z następujących metod:
- get_control – pozwala nam modyfikować parametry zadeklarowanej już kontrolki,
- remove_control – pozwala nam usunąć daną kontrolkę
Przykładowy kod zmieniający opis kontrolki:
$wp_customize->get_control('test_control')->description = 'New description';
Oraz kod usuwający tą kontrolkę:
$wp_customize->remove_control('test_control');
Dzięki powyższym funkcjom możemy pousuwać zbędne kontrolki dodawane przez WordPressa albo wtyczki lub też np. poprzenosić standardowe kontrolki pomiędzy sekcjami.
W wypadku modyfikacji na poziomie JS/CSS wykorzystujemy akcję customize_controls_enqueue_scripts, która pozwala dodać do ekranu personalizacji własne skrypty JS i style CSS.
Dodatkowo przy okazji modyfikacji kontrolek poprzez kod JS, polecam dodać uprzednio do elementów, które chcemy zmieniać jakieś dodatkowe klasy CSS poprzez argument input_attrs:
array( "input_attrs" => array( "class" => "js-override" ) )
Własne kontrolki?
Oczywiście API ekranu personalizacji dopuszcza tworzenie własnych kontrolek – de facto takowymi są wszystkie kontrolki, które tworzymy poprzez jednoargumentowe wywołanie funkcji add_control. Tworzenie własnych kontrolek to dość złożony temat, dlatego poświęcę mu oddzielny wpis. W tym miejscu chciałbym tylko zauważyć, że warto zastanowić się czy rzeczywiście musimy tworzyć własne kontrolki – sporo możemy osiągnąć modyfikując istniejące kontrolki, a wiele funkcji możemy uzyskać wykorzystując kontekst.
Podsumowanie
Kontrolki to niewątpliwie element ekranu personalizacji na który deweloper motywu może mieć największy wpływ i który też ma największy wpływ na wygodę konfiguracji motywu w WordPressie.