Recherche de site Web

Personnalisateur de thème : conditions, thèmes enfants et plugins


  1. 1. Introduction au personnalisateur de thème WordPress
  2. 2. Interagir avec le personnalisateur de thème WordPress
  3. 3. Modèle de personnalisation de thème WordPress
  4. 4. Extension du passe-partout du personnalisateur de thème WordPress
  5. 5. Lecture en cours : Personnalisateur de thème : conditions, thèmes enfants et plugins

Jusqu’à présent, nous avons vu à quel point il est simple de gérer les options de thème à l’aide de Theme Customizer Boilerplate et de ses crochets. Comme vous vous en souvenez probablement, l'étape la plus importante consistait à se connecter au hook de filtre 'thsp_cbp_options_array' et à lui transmettre la gamme d'options que vous souhaitez utiliser dans votre thème.

Je suis sûr que vous connaissez déjà les actions et les hooks de filtre WordPress – API du plugin – et leur fonctionnement, mais juste au cas où, voici un bref récapitulatif (en utilisant les hooks de filtre comme exemple). Vous pouvez définir votre fonction personnalisée et l'accrocher à un filtre existant à l'aide de la fonction add_filter :

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Concentrons-nous sur l’argumentation prioritaire. Sa valeur par défaut est 10, donc si vous n’utilisez pas d’autre nombre, c’est ce que sera la priorité d’exécution de votre fonction. Réduisez le nombre, plus tôt votre fonction est exécutée. Donc si vous faites quelque chose comme ceci :

// 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 );

Lorsque vous appelez la fonction the_content dans single.php ou dans tout autre modèle de publication, le contenu sera affiché, suivi du premier message, suivi du deuxième message. Non pas parce que c'est leur ordre dans cet extrait de code, mais à cause du paramètre de priorité d'exécution. Pensez aux crochets comme à des boules de neige roulant sur la colline et ramassant toutes sortes de choses sur leur passage.

Comment cela s’applique-t-il à Theme Customizer Boilerplate ?

Vous pouvez vous connecter à 'thsp_cbp_options_array' à partir du fichier function.php de votre thème, en utilisant une fonction personnalisée (par exemple my_theme_options_array) avec une valeur de priorité définie sur 1. Cela signifie toute autre fonction qui se connecte à 'thsp_cbp_options_array ' le crochet de filtre le fera APRÈS la fonction my_theme_options_array que vous avez déjà définie. Jetez un œil à cet exemple :

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 );

Cela ajoutera une nouvelle section au personnalisateur de thème avec un champ, appelé Mon bouton radio. Ensuite, vous, ou quelqu'un d'autre, développez un thème enfant pour votre thème et décidez de conserver la nouvelle section, mais au lieu de Mon bouton radio, il serait peut-être préférable d'avoir Ma case à cocher. 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 );

Vous avez remarqué que je n'ai pas transmis le paramètre $options à my_theme_options_array et que je l'ai fait dans la fonction my_child_theme_options_array ? En effet, lorsque je me suis connecté pour la première fois au hook 'thsp_cbp_options_array', je voulais remplacer les exemples d'options du Theme Customizer Boilerplate. Ensuite, lorsque je me suis à nouveau connecté à partir de mon thème enfant, je ne voulais pas supprimer complètement les options du thème parent, juste les modifier légèrement. C'est pourquoi je ne joue qu'avec $options['my_theme_new_section']['fields'], pas avec l'ensemble du tableau $options.

Bien sûr, vous pouvez également vous connecter plusieurs fois au hook de filtre 'thsp_cbp_options_array' de votre thème parent. Supposons que vous ayez choisi de ne pas ajouter de fonctionnalités de territoire de plugin à votre thème et de laisser les plugins faire ce qu'ils font. je suis censé le faire. Vous souhaitez désormais afficher certaines options du Theme Customizer uniquement si un certain plugin est actif. Encore une fois, c'est 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 );

Vous souhaitez développer un plugin de fonctionnalités de base à utiliser avec votre thème (comme vous devriez le faire) ? Vous pouvez également vous connecter à 'thsp_cbp_options_array' à partir de l'un des fichiers de votre plugin, de la même manière que vous le feriez à partir du fichier function.php d'un thème.

Ne devenez pas fou d’option

Chaque fois que vous ajoutez des options à un thème que vous développez, vous devez garder à l’esprit l’un des principes fondamentaux de WordPress : La décision, pas les options. Il est facile de se laisser emporter et de commencer à ajouter des options utilisateur pour chaque détail mineur de votre thème, mais cela ne rend service à personne. J'espère que ces quelques astuces, en particulier l'ajout d'options dépendantes du plugin, aideront à maintenir le nombre d'options de votre thème aussi bas que possible.

Après tout, si votre thème propose des options pour des éléments tels que chaque rayon de bordure de chaque élément, ce n'est pas un thème, c'est un éditeur WYSIWYG et probablement pas génial.

Vous n’achetez pas une chemise blanche parce qu’avec un effort supplémentaire vous pouvez la transformer en nappe, vous l’achetez parce que vous aimez son côté « chemise blanche ». Les thèmes WordPress devraient également être comme ça, ils doivent présenter le contenu d'une certaine manière, et non essayer de tout faire de toutes les manières imaginables. Si vous êtes un développeur de thèmes, il est de votre devoir de vous assurer que les attentes des utilisateurs sont ce qu'elles devraient être.