Plantilla del personalizador de temas: opciones condicionales, temas secundarios y complementos

  1. 1. Introducción al personalizador de temas de WordPress
  2. 2. Interactuando con WordPress Theme Customizer
  3. 3. Plantilla del personalizador de temas de WordPress
  4. 4 4. Ampliación de la plantilla del personalizador de temas de WordPress
  5. 5 5. Actualmente leyendo: Plantilla del personalizador de temas: opciones condicionales, temas secundarios y complementos

Hasta ahora hemos visto lo simple que es manejar las opciones de tema usando Theme Customizer Boilerplate y sus ganchos. Como probablemente recuerden, el paso más importante fue conectarse “Thsp_cbp_options_array” filtrar gancho y pasarle una 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 ($ etiqueta, $ function_to_add, $ prioridad, $ aceptado_args);

Centrémonos en el argumento de prioridad. Su valor predeterminado es 10, por lo que si no utiliza otro número, esa será la prioridad de ejecución de su función. Baje el número, antes se ejecuta su función. Entonces, si haces algo como esto:

// Agregando el primer mensaje
function my_theme_add_first_message ($ contenido) {
$ content. = '

primer mensaje

'; devolver $ contenido; } add_filter ('the_content', 'my_theme_add_first_message', 1); // Agregar segundo mensaje function my_theme_add_second_message ($ contenido) { $ content. = '

Segundo mensaje

'; devolver $ contenido; } add_filter ('the_content', 'my_theme_add_second_message', 2);

Cuando llame a la función_contenido en single.php o cualquier otro contenido de publicación de plantilla, se mostrará el 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 cuesta abajo recogiendo todo tipo de cosas en su camino.

¿Cómo se aplica esto a la plantilla del personalizador de temas??

Puedes enganchar “Thsp_cbp_options_array” desde el archivo function.php de su tema, utilizando 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 conecte a “Thsp_cbp_options_array” filter hook 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 () {
// Uso de la función auxiliar para obtener la capacidad requerida predeterminada
$ thsp_cbp_capability = thsp_cbp_capability ();

$ opciones = matriz (
// ID de sección
'my_theme_new_section' => matriz (

'istent_section '=> false,
'args' => array (
'title' => __ ('Nueva sección', 'my_theme_textdomain'),
'prioridad' => 10
),
'fields' => array (
/ *
* Campo de radio
* /
'my_radio_button' => array (
'setting_args' => array (
'default' => 'opción-2',
'type' => 'opción',
'capacidad' => $ thsp_cbp_capability,
'transport' => 'actualizar',
),
'control_args' => array (
'label' => __ ('Mi botón de radio', 'my_theme_textdomain'),
'type' => 'radio', // Radio control
'elecciones' => matriz (
'option-1' => array (
'label' => __ ('Opción 1', 'my_theme_textdomain')
),
'option-2' => array (
'label' => __ ('Opción 2', 'my_theme_textdomain')
),
'option-3' => array (
'label' => __ ('Opción 3', 'my_theme_textdomain')
)
),
'prioridad' => 3
)
)
)
)
);

devolver $ opciones;
}
add_filter ('thsp_cbp_options_array', 'my_theme_options_array', 1);

Esto agregará Nueva sección al Personalizador de temas con un campo, llamado Mi botón de radio. Luego, usted u otra persona desarrolla un tema secundario 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 ($ opciones) {
// Uso de la función auxiliar para obtener la capacidad requerida predeterminada
$ thsp_cbp_capability = thsp_cbp_capability ();

/ *
* Esta vez, solo estamos editando campos en my_theme_new_section en la matriz $ options
* /
$ opciones ['my_theme_new_section'] ['fields'] = array (
'my_checkbox_field' => array (
'setting_args' => array (
'default' => verdadero,
'type' => 'opción',
'capacidad' => $ thsp_cbp_capability,
'transport' => 'actualizar',
),
'control_args' => array (
'label' => __ ('Mi casilla de verificación', 'my_theme_textdomain'),
'type' => 'checkbox', // Control de campo de casilla de verificación
'prioridad' => 2
)
)
);

devolver $ opciones;
}
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” gancho Quería anular las opciones de muestra de Theme Customizer Boilerplate. Luego, cuando volví a conectarlo desde el tema de mi hijo, no quise eliminar por completo las opciones del tema principal, solo las edité ligeramente. Es por eso que solo estoy jugando con $ options [‘my_theme_new_section’] [‘fields’], no con toda la matriz $ options.

Por supuesto, también puedes conectar “Thsp_cbp_options_array” filtre el gancho del tema principal más de una vez. Supongamos 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. De nuevo, fácil:

function my_plugin_dependency_options_array ($ opciones) {
// Uso de la función auxiliar para obtener la capacidad requerida predeterminada
$ thsp_cbp_capability = thsp_cbp_capability ();

/ *
* Solo agregar my_plugin_dependency_section si 'test-plugin.php' está activo
* /
if (is_plugin_active ('test-plugin / test-plugin.php')) {

$ opciones ['my_plugin_dependency_section'] = matriz (
'istent_section '=> false,
'args' => array (
'title' => __ ('Dependencia del complemento', 'my_theme_textdomain'),
'prioridad' => 10
),
'fields' => array (
/ *
* Campo de texto
* /
// ID de campo
'new_text_field' => array (
'setting_args' => array (
'default' => __ ('', 'my_theme_textdomain'),
'type' => 'opción',
'capacidad' => $ thsp_cbp_capability,
'transport' => 'actualizar',
),
'control_args' => array (
'label' => __ ('Solo se muestra si', 'my_theme_textdomain'),
'type' => 'text', // Control de campo de texto
'prioridad' => 5
)
),
)
);

}

devolver $ opciones;
}
add_filter ('thsp_cbp_options_array', 'my_plugin_dependency_options_array', 3);

¿Quieres desarrollar un complemento de funcionalidad central para ser usado con tu tema (como deberías)? Puedes enganchar “Thsp_cbp_options_array” de 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

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 ningún favor a nadie. Espero que estos pocos trucos, especialmente agregar opciones dependientes del complemento, ayuden a que las opciones de su tema cuenten 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 excelente..

No compra una camisa blanca porque con un esfuerzo adicional puede transformarla en un mantel, la compra porque le gusta su “camisa blanca”. Los temas de WordPress también deberían ser así, deberían presentar el contenido de cierta manera, no tratar de hacer todo de todas las formas imaginables. Si es un desarrollador de temas, es su trabajo asegurarse de que las expectativas de los usuarios sean lo que deberían ser.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me