Hasta ahora hemos visto lo simple que es manejar las opciones de tema usando Theme Customizer Boilerplate y sus ganchos. Como probablemente recordará, el paso más importante fue conectarse ‘thsp_cbp_options_array’ filter hook y pasándole la variedad de opciones que desea usar en su tema.
Estoy seguro de que ya está familiarizado con la acción de WordPress y los ganchos de filtro (API de complementos) y cómo funcionan, pero por si acaso, aquí hay un resumen rápido (usando los ganchos de filtro como ejemplo). Puede definir su función personalizada y conectarla a un filtro existente usando la función add_filter:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Centrémonos en el argumento de prioridad. Su valor predeterminado es 10, por lo que si no usa otro número, esa será la prioridad de ejecución de su función. Baje el número, antes de que se ejecute su función. Entonces, si haces algo como esto:
// 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 );
Cuando llame a la función the_content en single.php o cualquier otra plantilla, se mostrará el contenido de la publicación, seguido del Primer mensaje, seguido del Segundo mensaje. No porque ese sea su orden en este fragmento de código, sino por el parámetro de prioridad de ejecución. Piense en los ganchos como si fueran bolas de nieve rodando colina abajo recogiendo todo tipo de cosas en su camino.
¿Cómo se aplica esto a Theme Customizer Boilerplate?
Puedes engancharte ‘thsp_cbp_options_array’ desde el archivo function.php de su tema, usando una función personalizada (por ejemplo, my_theme_options_array) con el valor de prioridad establecido en 1. Eso significa cualquier otra función que se enganche en ‘thsp_cbp_options_array’ El gancho de filtro lo hará DESPUÉS de la función my_theme_options_array que ya definió. Echale un vistazo a éste ejemplo:
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 );
Esto agregará Nueva sección al Personalizador de temas con un campo en él, llamado Mi botón de radio. Luego, usted u otra persona desarrolla un tema hijo para su tema y decide mantener Nueva sección, pero en lugar de Mi botón de radio, sería mejor tener Mi casilla de verificación. 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 );
¿Noté que no pasé el parámetro $ options a my_theme_options_array y lo hice en la función my_child_theme_options_array? Eso es porque cuando me enganché por primera vez ‘thsp_cbp_options_array’ hook Quería anular las opciones de muestra de Theme Customizer Boilerplate. Luego, cuando volví a conectarlo desde mi tema secundario, no quería eliminar por completo las opciones del tema principal, solo editarlas ligeramente. Es por eso que solo estoy jugando con $ options[‘my_theme_new_section’][‘fields’], no toda la matriz $ options.
Por supuesto, también puede conectarse ‘thsp_cbp_options_array’ filtro de gancho de su tema principal más de una vez … Digamos que eligió no agregar características de territorio de complementos a su tema y dejar que los complementos hagan lo que se supone que deben hacer. Ahora desea mostrar algunas opciones del Personalizador de temas solo si un determinado complemento está activo. Nuevamente, 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 );
Quiere desarrollar un complemento de funcionalidad principal para ser utilizado con su tema (como debería)? Puedes engancharte ‘thsp_cbp_options_array’ desde uno de los archivos de su complemento también, de la misma manera que lo haría desde el archivo function.php de un tema.
No te vuelvas loco con las opciones
Cada vez que agrega opciones a un tema que desarrolla, debe mantener uno de los principios básicos de WordPress: Decisión, no opciones – en mente. Es fácil dejarse llevar y comenzar a agregar opciones de usuario para cada pequeño detalle que tenga su tema, pero eso no le hace un favor a nadie. Espero que estos pocos trucos, especialmente la adición de opciones dependientes de complementos, ayuden a mantener el conteo de opciones de su tema lo más bajo posible.
Después de todo, si su tema tiene opciones para cosas como cada radio de borde de cada elemento, no es un tema, es un editor WYSIWYG y probablemente no sea uno excelente.
No compras una camisa blanca porque con un esfuerzo extra puedes transformarla en un mantel, la compras porque te gusta su “camisa blanca”. Los temas de WordPress también deberían ser así, deberían presentar el contenido de cierta manera, no intentar hacer todo de todas las formas imaginables. Si eres un desarrollador de temas, tu trabajo es asegurarte de que las expectativas del usuario sean las que deberían ser.