- 1. Introdução ao personalizador de temas do WordPress
- 2. Interagindo com o WordPress Theme Customizer
- 3. Caldeira do personalizador de temas do WordPress
- 4. Estendendo o padrão do personalizador de temas do WordPress
- 5. Atualmente lendo: Personalizador de Temas: Condicionais, Temas Filhos e Plugins
Até agora vimos como é simples lidar com opções de tema usando o Theme Customizer Boilerplate e seus ganchos. Como você provavelmente se lembra, o passo mais importante foi conectar-se ao gancho de filtro ‘thsp_cbp_options_array’ e passar a matriz de opções que você deseja usar em seu tema.
Tenho certeza de que você já está familiarizado com os ganchos de ação e filtro do WordPress — API de plug-in — e como eles funcionam, mas, por precaução, aqui está uma recapitulação rápida (usando ganchos de filtro como exemplo). Você pode definir sua função personalizada e conectá-la a um filtro existente usando a função add_filter:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Vamos nos concentrar no argumento de prioridade. Seu valor padrão é 10, então se você não usar outro número, essa será a prioridade de execução da sua função. Diminua o número, mais cedo sua função é executada. Então se você fizer algo assim:
// 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 você chama a função the_content em single.php ou qualquer outro conteúdo do post template será mostrado, seguido pela Primeira Mensagem, seguida pela Segunda Mensagem. Não porque essa é a ordem neste trecho de código, mas por causa do parâmetro de prioridade de execução. Pense nos ganchos como se fossem bolas de neve rolando morro abaixo pegando todo tipo de coisa pelo caminho.
Como isso se aplica ao Theme Customizer Boilerplate?
Você pode conectar em ‘thsp_cbp_options_array’ do arquivo function.php do seu tema, usando uma função personalizada (por exemplo, my_theme_options_array) com valor de prioridade definido como 1. Isso significa que qualquer outra função que se conecte ao gancho de filtro ‘thsp_cbp_options_array’ fará isso DEPOIS da função my_theme_options_array que você Já definido. Dê uma olhada neste exemplo:
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 );
Isso adicionará Nova Seção ao Personalizador de Temas com um campo, chamado Meu Botão de Rádio. Então você, ou outra pessoa, desenvolve um tema filho para o seu tema e decide manter Nova Seção, mas em vez de Meu botão de opção, pode ser melhor ter Minha caixa de seleção. Fácil:
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 );
Percebi que não passei o parâmetro $options para my_theme_options_array e fiz isso na função my_child_theme_options_array? Isso porque quando eu primeiro enganchei no gancho ‘thsp_cbp_options_array’ eu queria substituir as opções de amostra do Theme Customizer Boilerplate. Então, quando eu o conectei novamente a partir do meu tema filho, eu não queria excluir completamente as opções do tema pai, apenas editá-las levemente. É por isso que estou apenas brincando com $options[‘my_theme_new_section’][‘fields’], não com todo o array $options.
Claro, você também pode usar o hook de filtro ‘thsp_cbp_options_array’ do seu tema pai mais de uma vez. Digamos que você escolheu não adicionar recursos de território de plug-in ao seu tema e deixar os plug-ins fazerem o que deveriam. Agora você quer mostrar algumas opções do Personalizador de Temas apenas se um determinado plugin estiver ativo. Novamente, fácil:
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 );
Quer desenvolver um plugin de funcionalidade central para ser usado com seu tema (como deveria)? Você pode conectar em ‘thsp_cbp_options_array’ de um dos arquivos do seu plugin também, da mesma forma que você faria a partir do arquivo function.php de um tema.
Não vá louco por opção
Toda vez que você adiciona opções a um tema que você desenvolve, você precisa manter um dos princípios básicos do WordPress – Decisão não Opções – em mente. É fácil se empolgar e começar a adicionar opções de usuário para cada pequeno detalhe que seu tema tem, mas isso não está fazendo um favor a ninguém. Espero que esses poucos truques, especialmente adicionar opções dependentes de plug-ins, ajudem a manter a contagem de opções do seu tema o mais baixa possível.
Afinal, se o seu tema tem opções para coisas como cada raio de borda de cada elemento, não é um tema, é um editor WYSIWYG e provavelmente não é ótimo.
Você não compra uma camisa branca porque com algum esforço extra pode transformá-la em uma toalha de mesa, você compra porque gosta de sua “camisa branca”. Os temas do WordPress devem ser assim também, eles devem apresentar o conteúdo de uma certa maneira, não tentar fazer tudo de todas as formas imagináveis. Se você é um desenvolvedor de temas, é seu trabalho garantir que as expectativas do usuário sejam as que deveriam ser.