Personalizzazione del tema: condizionali, temi secondari e plugin
- <span>1. Introduzione al personalizzatore di temi WordPress
- <span>2. Interazione con il personalizzatore di temi WordPress
- <span>3. Boilerplate di personalizzazione del tema WordPress
- <span>4. Estensione del boilerplate di personalizzazione del tema WordPress
- 5. Attualmente in lettura:Personalizzazione temi: condizionali, temi secondari e plugin
Finora abbiamo visto quanto sia semplice gestire le opzioni del tema utilizzando Theme Customizer Boilerplate e i suoi hook. Come probabilmente ricorderai, il passaggio più importante è stato collegarsi al filter hook ‘thsp_cbp_options_array’ e passargli una serie di opzioni che desideri utilizzare nel tuo tema.
Sono sicuro che tu abbia già familiarità con le azioni di WordPress e gli hook di filtro (API dei plugin) e come funzionano, ma per ogni evenienza, ecco un breve riepilogo (utilizzando gli hook di filtro come esempio). Puoi definire la tua funzione personalizzata e collegarla a un filtro esistente utilizzando la funzione add_filter:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Concentriamoci sull’argomento prioritario. Il suo valore predefinito è 10, quindi se non usi un altro numero, quella sarà la priorità di esecuzione della tua funzione. Abbassando il numero, prima verrà eseguita la funzione. Quindi se fai qualcosa del genere:
// 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 );
Quando chiami la funzione_content in single.php o in qualsiasi altro modello, verrà mostrato il contenuto del post, seguito dal Primo messaggio, seguito dal Secondo messaggio. Non perché questo sia il loro ordine in questo frammento di codice, ma a causa del parametro di priorità di esecuzione. Pensa ai ganci come se fossero palle di neve che rotolano giù dalla collina raccogliendo ogni genere di cose lungo il loro cammino.
Come si applica a Theme Customizer Boilerplate?
Puoi collegarti a 'thsp_cbp_options_array' dal file function.php del tuo tema, utilizzando una funzione personalizzata (ad esempio my_theme_options_array) con il valore di priorità impostato su 1. Ciò significa qualsiasi altra funzione che si collega a 'thsp_cbp_options_array ' filter hook lo farà DOPO la funzione my_theme_options_array che hai già definito. Dai un'occhiata a questo esempio:
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 );
Ciò aggiungerà una nuova sezione al personalizzatore tema con un campo al suo interno, chiamato Il mio pulsante di scelta. Quindi tu o qualcun altro sviluppate un tema figlio per il vostro tema e decidete di mantenere la Nuova sezione, ma invece del Mio pulsante di scelta potrebbe essere meglio avere La mia casella di controllo. Facile:
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 );
Hai notato che non ho passato il parametro $options a my_theme_options_array e l'ho fatto nella funzione my_child_theme_options_array? Questo perché quando mi sono collegato per la prima volta all'hook 'thsp_cbp_options_array' volevo sovrascrivere le opzioni di esempio Boilerplate di personalizzazione del tema. Quindi, quando l'ho ricollegato dal tema figlio, non volevo eliminare completamente le opzioni del tema principale, ma solo modificarle leggermente. Ecco perché sto solo scherzando con $options['my_theme_new_section']['fields'], non con l'intero array $options.
Naturalmente, puoi anche collegarti al filtro hook 'thsp_cbp_options_array' dal tuo tema principale più di una volta. Diciamo che hai scelto di non aggiungere funzionalità del territorio dei plugin al tuo tema e lasciare che i plugin facciano quello che fanno. dovresti farlo. Ora vuoi mostrare alcune opzioni di personalizzazione del tema solo se un determinato plugin è attivo. Ancora una volta, facile:
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 );
Vuoi sviluppare un plug-in con funzionalità di base da utilizzare con il tuo tema (come dovresti)? Puoi collegarti a 'thsp_cbp_options_array' anche da uno dei file del tuo plugin, nello stesso modo in cui lo faresti dal file function.php di un tema.
Non impazzire per le opzioni
Ogni volta che aggiungi opzioni a un tema che sviluppi, devi tenere a mente uno dei principi fondamentali di WordPress: Decisione, non opzioni. È facile lasciarsi trasportare e iniziare ad aggiungere opzioni utente per ogni piccolo dettaglio del tuo tema, ma questo non fa un favore a nessuno. Spero che questi pochi trucchi, in particolare l’aggiunta di opzioni dipendenti dal plugin, ti aiuteranno a mantenere il numero di opzioni del tuo tema il più basso possibile.
Dopotutto, se il tuo tema ha opzioni per cose come ogni raggio del bordo di ogni singolo elemento, non è un tema, è un editor WYSIWYG e probabilmente non eccezionale.
Non compri una camicia bianca perché con qualche sforzo in più puoi trasformarla in una tovaglia, la compri perché ti piace la sua “camicia bianca”. Anche i temi WordPress dovrebbero essere così, dovrebbero presentare i contenuti in un certo modo, non cercare di fare tutto in ogni modo immaginabile. Se sei uno sviluppatore di temi, è tuo compito assicurarti che le aspettative degli utenti siano quelle che dovrebbero essere.