web-dev-qa-db-fra.com

Différentes images de fond par catégorie

J'essaie de mettre une image de fond de corps différente pour chaque catégorie.

body { 
background-color: #000; 
background-image: url(img/bg.png); 
background-repeat: no-repeat; 
background-position: center top; 
font-size: 14px; color: #555; 
font-family: Arial, Helvetica, Verdana, sans-serif; }

Je veux seulement background-image: url(img/bg.png); différent pour chaque catégorie.

J'ai trouvé une méthode possible. C'est comme ça:

<link rel="stylesheet" href="" type="text/css" media="screen,projection" /> 
<? php if( is_category(1) ) { ?> 
<link rel="stylesheet" href="" type="text/css" media="screen" /> 
<?php } 
elseif ( is_category (2) ) { ?> 
<link rel="stylesheet" href="" type="text/css" media="screen" /> 
<?php } 
elseif ( is_category (33) ) { ?> 
<link rel="stylesheet" href="" type="text/css" media="screen" /> <?php } 
else { ?> <?php } ?>

Néanmoins, je suis presque sûr que ce n’est pas la meilleure façon d’atteindre mon objectif, car:

1) Il recherche toute la feuille de style. 2) Il pose des questions à l'intérieur du header.php, ce qui n'est peut-être pas la meilleure solution compte tenu de la vitesse de la page.

Mon idée est de créer différentes classes de corps:

body.Apple { code here }
body.area { code here }
body.usa { code here }
body.bolt { code here }
body.jennifer { code here }

... ou peu importe.

J'ai juste besoin de php pour charger différentes classes de corps à partir d'une seule feuille de style pour différentes catégories.

Est-ce que quelqu'un a une bonne solution?

1
Meigo62

Vous pouvez le faire en utilisant la fonction très pratique body_class() de Wordpress. Selon que vous utilisiez ou non ce thème dans votre thème, il se peut qu’il vous fournisse déjà ce dont vous avez besoin. Voici comment savoir:

Vérifiez la source de votre page pour voir si la balise <body> dans les pages d'archives de votre catégorie contient des classes contenant votre slug de catégorie: category-Apple, category-area, category-usa, etc. Elles seront généralement incluses par défaut.

  • S'ils sont présents, vous pouvez les utiliser comme sélecteurs dans votre CSS: body.category-Apple { /* code here */ }, etc.

  • Sinon, ajoutez la fonction body_class() à la balise <body> de votre thème, probablement dans le fichier header.php. Cela fonctionne comme ceci:

    <body <?php body_class(); ?>>

Vous pouvez éventuellement ajouter une classe supplémentaire en tant que paramètre.

Voici l'entrée dans le Codex Wordpress: http://codex.wordpress.org/Function_Reference/body_class

4
supertrue

C'est déjà intégré: la fonction body_class() crée des classes spéciales pour chaque catégorie:

PHP

<body <?php body_class(); ?>>

Sortie sur la catégorie "jennifer"

<body class="category-jennifer">
2
fuxia

Si votre thème utilise body_class comme il se doit, alors vous avez déjà toutes les classes dont vous avez besoin.

Pour les catégories, vous devriez avoir:

  • catégorie
  • nom de catégorie
  • catégorie- (id)
  • catégorie-paginé- (numéro de page)

Si vous avez beaucoup de règles de catégorie, je vous conseillerais de charger conditionnellement une feuille de style uniquement pour les archives de catégorie. Si vous n'avez que quelques règles, cela n'en vaut pas la peine. Il suffit de les inclure dans la feuille de style principale.

function load_cat_style_wpse_87295() {
   if (!is_category()) return false;
   wp_register_style( 'catstyle', get_stylesheet_directory().'/path/to/stylesheet', false, null, 'all' );
   wp_enqueue_style( 'catstyle' );
}
add_action( 'wp_enqueue_scripts', 'load_cat_style_wpse_87295' ); 
1
s_ha_dum

Comme indiqué dans d'autres réponses ici, lorsque vous vous trouvez sur une page de catégorie, la fonction body_class vous fournit déjà une classe pour la catégorie actuelle.

Toutefois, si vous souhaitez que l'image d'arrière-plan persiste également dans les publications de la catégorie, vous pouvez utiliser le code fourni par le codex de la fonction body_class et filter . :

// add category nicenames in body class
function category_id_class($classes) {
   global $post;
   foreach((get_the_category($post->ID)) as $category)
        $classes[] = $category->category_nicename;
   return $classes;
 }
 add_filter('body_class', 'category_id_class');
1
Lea Cohen