Personalizador de temas: términos, temas secundarios y complementos

Personalizador de temas: términos, temas secundarios y complementos

Hasta ahora, hemos visto lo fácil que es administrar las opciones de temas utilizando el personalizador de temas Boilerplate y sus ganchos. Como probablemente recordará, el paso más importante fue ‘thsp_cbp_options_array’ hook filter y pasarle el conjunto 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 complemento) 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 la prioridad. Su valor predeterminado es 10, por lo que si no usa otro número, esa es la prioridad de ejecución de su función. Reduzca el número, cuanto antes se realice 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 del artículo, seguido del primer mensaje, seguido del segundo mensaje. No porque ese sea su orden en este fragmento, sino por la configuración 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 la zona de cocción del personalizador de temas?

Puedes conectarte a ‘thsp_cbp_options_array’ desde el archivo function.php de tu tema, usando una función personalizada (por ejemplo, my_theme_options_array) con un valor de prioridad establecido en 1. Esto significa cualquier otra función que se conecte a ‘thsp_cbp_options_array’ filter hook hará esto 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á una nueva sección al Personalizador de temas con un campo, llamado Mi botón de radio. Luego, usted u otra persona desarrollan un tema hijo para su tema y deciden mantener Nueva sección, pero en lugar de Mi botón de opción, 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? Es porque cuando me colgué por primera vez ‘thsp_cbp_options_array’ hook Quería anular las opciones de ejemplo del personalizador de temas Boilerplate. Luego, cuando volví a iniciar sesión desde mi tema secundario, no quería eliminar por completo las opciones del tema principal, sino cambiarlas ligeramente. Por eso solo juego con $ options[‘my_theme_new_section’][‘fields’], no la gama completa de $ opciones.

Por supuesto, también puede iniciar sesión en ‘thsp_cbp_options_array’ filtro de gancho de su tema principal más de una vez. Digamos que eligió no agregar la funcionalidad 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 de personalización de temas solo si un determinado complemento está activo. De nuevo, 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 usar con su tema (como debería)? Puedes conectarte a ‘thsp_cbp_options_array’ desde uno de los archivos de su complemento, de la misma manera que lo haría con el archivo function.php de un tema.

No te vuelvas loco

Siempre que agregue opciones a un tema que está desarrollando, debe mantener uno de los fundamentos de WordPress: Decisión y sin opciones – en el espíritu. Es fácil dejarse llevar y comenzar a agregar opciones de usuario para cada pequeño detalle de su tema, pero no le hace ningún favor a nadie. Espero que estos pocos consejos, especialmente la adición de opciones dependientes de complementos, ayuden a mantener las opciones de tema lo más bajas 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 la puedes convertir en un mantel, la compras porque te gusta su “blancura”. Los temas de WordPress también deberían ser así, deberían presentar el contenido de cierta manera, sin intentar hacer todo de todas las formas imaginables. Si eres un desarrollador de temas, es tu trabajo asegurarte de que las expectativas del usuario sean las que deberían ser.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir arriba