Dostosowywanie motywów: warunki warunkowe, motywy potomne i wtyczki
1. Wprowadzenie do dostosowywania motywów WordPress 2. Interakcja z konfiguratorem motywów WordPress 3. Szablon dostosowywania motywów WordPress 4. Rozszerzenie szablonu dostosowywania motywu WordPress - 5. Aktualnie czytam: Dostosowywanie motywów: warunki warunkowe, motywy potomne i wtyczki
Do tej pory widzieliśmy, jak łatwo jest zarządzać opcjami motywu za pomocą narzędzia Theme Customizer Boilerplate i jego haczyków. Jak zapewne pamiętasz, najważniejszym krokiem było podłączenie się do haka filtrującego „thsp_cbp_options_array” i przekazanie mu tablicy opcji, których chcesz użyć w swoim motywie.
Jestem pewien, że znasz już haki akcji i filtrów WordPress — API wtyczek — oraz ich działanie, ale na wszelki wypadek oto krótkie podsumowanie (na przykładzie haków filtrów). Możesz zdefiniować własną funkcję i podłączyć ją do istniejącego filtra za pomocą funkcji add_filter:
add_filter( $tag, $function_to_add, $priority, $accepted_args );Skupmy się na argumencie priorytetowym. Jego domyślna wartość to 10, więc jeśli nie użyjesz innej liczby, taki będzie priorytet wykonania Twojej funkcji. Zmniejsz liczbę, zanim funkcja zostanie wykonana. Jeśli więc zrobisz coś takiego:
// Adding first message
function my_theme_add_first_message( $content ) {
$content .= '<p>First Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_first_message', 1 );
// Adding second message
function my_theme_add_second_message( $content ) {
$content .= '<p>Second Message</p>';
return $content;
}
add_filter( 'the_content', 'my_theme_add_second_message', 2 );Kiedy wywołasz funkcję_content w single.php lub innym szablonie, zostanie wyświetlona treść posta, po której nastąpi Pierwsza Wiadomość, a następnie Druga Wiadomość. Nie dlatego, że taka jest ich kolejność w tym fragmencie kodu, ale ze względu na parametr priorytetu wykonania. Pomyśl o hakach jak o kulach śnieżnych toczących się po wzgórzu, zbierając po drodze różne rzeczy.
Jak to się ma do szablonu dostosowywania motywu?
Możesz podłączyć się do 'thsp_cbp_options_array' z plikufunction.php motywu, używając funkcji niestandardowej (np. my_theme_options_array) z wartością priorytetu ustawioną na 1. Oznacza to dowolną inną funkcję, która łączy się z 'thsp_cbp_options_array ' hak filtru zrobi to PO funkcji my_theme_options_array, którą już zdefiniowałeś. Spójrz na ten przykład:
function my_theme_options_array() {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
$options = array(
// Section ID
'my_theme_new_section' => array(
'existing_section' => false,
'args' => array(
'title' => __( 'New Section', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Radio field
*/
'my_radio_button' => array(
'setting_args' => array(
'default' => 'option-2',
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Radio Button', 'my_theme_textdomain' ),
'type' => 'radio', // Radio control
'choices' => array(
'option-1' => array(
'label' => __( 'Option 1', 'my_theme_textdomain' )
),
'option-2' => array(
'label' => __( 'Option 2', 'my_theme_textdomain' )
),
'option-3' => array(
'label' => __( 'Option 3', 'my_theme_textdomain' )
)
),
'priority' => 3
)
)
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_theme_options_array', 1 );Spowoduje to dodanie nowej sekcji do dostosowywania motywu z jednym polem o nazwie Mój przycisk radiowy. Następnie Ty lub ktoś inny opracowuje motyw podrzędny dla Twojego motywu i decydujesz się zachować nową sekcję, ale zamiast Mojego przycisku opcji lepszym rozwiązaniem może być Moje pole wyboru. Łatwy:
function my_child_theme_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* This time, we're only editing fields in my_theme_new_section in the $options array
*/
$options['my_theme_new_section']['fields'] = array(
'my_checkbox_field' => array(
'setting_args' => array(
'default' => true,
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'My Checkbox', 'my_theme_textdomain' ),
'type' => 'checkbox', // Checkbox field control
'priority' => 2
)
)
);
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_child_theme_options_array', 2 );Zauważyłeś, że nie przekazałem parametru $options do my_theme_options_array i zrobiłem to w funkcji my_child_theme_options_array? Dzieje się tak dlatego, że kiedy po raz pierwszy podłączyłem się do haka „thsp_cbp_options_array”, chciałem zastąpić przykładowe opcje szablonu dostosowywania motywu. Następnie, kiedy ponownie się do niego podłączyłem z motywu potomnego, nie chciałem całkowicie usuwać opcji motywu nadrzędnego, po prostu lekko je edytować. Dlatego bawię się tylko $options[„my_theme_new_section”][„fields”], a nie całą tablicą $options.
Oczywiście możesz także więcej niż raz podłączyć filtr 'thsp_cbp_options_array' z motywu nadrzędnego. Powiedzmy, że zdecydowałeś się nie dodawać do swojego motywu funkcji terytorialnych wtyczek i pozwolić wtyczkom robić to, co do nich należy. powinienem. Teraz chcesz wyświetlić niektóre opcje dostosowywania motywu tylko wtedy, gdy aktywna jest określona wtyczka. Znowu proste:
function my_plugin_dependency_options_array( $options ) {
// Using helper function to get default required capability
$thsp_cbp_capability = thsp_cbp_capability();
/*
* Only adding my_plugin_dependency_section if 'test-plugin.php' is active
*/
if ( is_plugin_active( 'test-plugin/test-plugin.php' ) ) {
$options['my_plugin_dependency_section'] = array(
'existing_section' => false,
'args' => array(
'title' => __( 'Plugin Dependency', 'my_theme_textdomain' ),
'priority' => 10
),
'fields' => array(
/*
* Text field
*/
// Field ID
'new_text_field' => array(
'setting_args' => array(
'default' => __( '', 'my_theme_textdomain' ),
'type' => 'option',
'capability' => $thsp_cbp_capability,
'transport' => 'refresh',
),
'control_args' => array(
'label' => __( 'Only shows if', 'my_theme_textdomain' ),
'type' => 'text', // Text field control
'priority' => 5
)
),
)
);
}
return $options;
}
add_filter( 'thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3 );Chcesz opracować wtyczkę z podstawową funkcjonalnością, która będzie używana z Twoim motywem (tak jak powinieneś)? Możesz podłączyć się do „thsp_cbp_options_array” z jednego z plików wtyczki, w ten sam sposób, w jaki robisz to z pliku Function.php motywu.
Nie szalej z opcją
Za każdym razem, gdy dodajesz opcje do tworzonego motywu, musisz pamiętać o jednej z podstawowych zasad WordPressa – Decyzja, a nie opcje. Łatwo dać się ponieść emocjom i zacząć dodawać opcje użytkownika dla każdego drobnego szczegółu motywu, ale to nie robi nikomu przysługi. Mam nadzieję, że tych kilka sztuczek, zwłaszcza dodanie opcji zależnych od wtyczek, pomoże utrzymać liczbę opcji motywu na jak najniższym poziomie.
W końcu, jeśli Twój motyw ma opcje takie jak każdy promień obramowania każdego pojedynczego elementu, nie jest to motyw, ale edytor WYSIWYG i prawdopodobnie nie jest świetny.
Nie kupujesz białej koszuli, bo przy odrobinie wysiłku możesz zamienić ją w obrus, kupujesz ją, bo podoba ci się jej „biała koszula”. Motywy WordPress też takie powinny być, powinny prezentować treść w określony sposób, a nie próbować robić wszystkiego na wszystkie możliwe sposoby. Jeśli jesteś twórcą motywów, Twoim zadaniem jest upewnienie się, że oczekiwania użytkowników są takie, jakie powinny być.
