Plusieurs fonds personnalisés dans un thème WordPress (alternative à add_custom_background)

La fonction de WordPress add_custom_background() permet d’ajouter un fond personnalisé aux paramètres de thème, fond qui sera ensuite appliqué sur la balise body en front.

Cependant, cette fonction n’autorise qu’un seul fond personnalisé.
Comment faire si l’on souhaite pouvoir définir plusieurs fonds personnalisés ? Par exemple, mettre un background sur la home, un autre pour une catégorie donnée, et enfin, un fond par défaut sur les autres pages ?

Voici un script qui permet de répondre à cette problématique.

1- Inclusion

Ajoutez le fichier custom-background-multiple.php à votre dossier de thème.

2- Déclarer les fonds nécessaires

Dans le fichier functions.php, ajoutez les lignes suivantes :

	/* custom background multiple */
	require_once( dirname(__FILE__).'/custom-background-multiple.php' );
	if (is_admin() )
	{
		//Declaration des fonds nécessaires
		//Vous pouvez déclarer autant de fonds que souhaité.

		/*Ordre des arguments :
			1- Callback, fonction définie ci-après
			2- Chaine vide (en réalité : $admin_image_div_callback (cf add_custom_background())).
			3- Titre dans le menu d'administration (menu apparence)
			4- Ajout au titre de la page  "Arrière-plan personnalisé"
			5- L'identifiant unique de ce fond
		*/
		$custom_background_multiple_home =& new Custom_Background_Multiple( 'my_custom_mutiple_background_cb', '' ,'Fond accueil',' : Page d\'accueil','home');
		add_action( 'admin_menu', array( &$custom_background_multiple_home, 'init' ) );

		$custom_background_multiple_toto =& new Custom_Background_Multiple( 'my_custom_mutiple_background_cb', '','Fond pour Toto',' : Pages de la catégorie Toto','toto');
		add_action( 'admin_menu', array( &$custom_background_multiple_toto, 'init' ) );

		$custom_background_multiple_defaut =& new Custom_Background_Multiple( 'my_custom_mutiple_background_cb', '','Fond par défaut',' : Autres pages','defaut');
		add_action( 'admin_menu', array( &$custom_background_multiple_defaut, 'init' ) );
	}
	else
		add_action( 'wp_head', 'my_custom_mutiple_background_cb' );
	/* end custom background multiple */

Cela ajoute, dans la menu « Apparence », une entrée de menu pour chacun des fonds personnalisés.

Ensuite, il faut définir dans quels cas on va afficher quel fond. C’est le role de la fonction
my_custom_mutiple_background_cb(), définie comme callback, qu’on va ajouter à la suite de notre fichier functions.php.

/* Cette fonction doit être modifiée en fonction des conditions d'affichage des différents backgrounds
*/
function my_custom_mutiple_background_cb(){
	/* conditions à modifier
	Le but est d'avoir dans $cle, l'identifiant unique du fond souhaité, tel que défini au-dessus
	*/
	$cle='defaut';
	if(is_home())
		$cle='home';
	elseif(is_category('toto'))
		$cle='toto';
	/* fin des conditions */

	echo custom_mutiple_background_cb($cle);
}