Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Ajout d’une classe de corps basée sur un modèle

13

Travailler avec des modèles dans WordPress n’est pas rare. Tout est une sorte de modèle – du modèle de page principale, du modèle de page unique, du modèle 404 – jusqu’aux modèles personnalisés.

Parfois, cependant, vous souhaiterez peut-être appliquer une classe à l’ bodyélément en fonction du modèle utilisé afin de pouvoir styliser ce modèle particulier un peu différemment du reste du site.

Bien que vous puissiez le faire de différentes manières, pour le faire, nous avons tous nos méthodes, alors j’ai pensé partager la mienne.

Classe de corps basée sur un modèle

Avant de sauter dans le code pour ajouter une classe de corps basée sur un modèle, il est important de noter que je suppose que le modèle est nommé au format suivant: template-{name-of-template}.php.

Disons que vous travaillez sur un modèle pour afficher des informations sur le poids que vous avez perdu en un mois et que vous souhaitez le faire en utilisant un modèle pour cela. Le modèle peut être nommé template-weight-loss.php.

Voici le truc: appliquer le nom de la classe à une seule page qui utilise ce modèle n’est pas un gros problème. Mais si vous avez plusieurs pages qui utilisent ce modèle (ce qui, si vous exécutez un site dans lequel de nombreuses personnes peuvent utiliser ce modèle, cela a du sens, n’est-ce pas ?), alors vous voudrez vous assurer d’appliquer le nom de la classe à chaque page que ce modèle.

Mais comment?

Il existe plusieurs façons de procéder, mais cela nécessite au moins les éléments suivants :

  1. Accrocher au crochet body_class fourni par WordPress,
  2. Lecture du nom du modèle,
  3. L’appliquer au nom de classe du corps (si la page utilise le modèle)

Heureusement, c’est facile à faire car le hook passe un tableau de classes dans une fonction hookée et les métadonnées d’un article donné indiquent s’il utilise ou non un modèle.

Cela dit, voici comment cela peut être réalisé :

<?php

add_filter('body_class', 'acme_add_body_class');
/**
 * If the current page has a template, apply it's name to the list of classes. This is
 * necessary if there are multiple pages with the same template and you want to apply the
 * name of the template to the class of the body.
 *
 * @param array $classes The current array of attributes to be applied to the 
 */
function acme_add_body_class($classes)
{
  if (!empty(get_post_meta(get_the_ID(), '_wp_page_template', true))) {
      // Remove the `template-` prefix and get the name of the template without the file extension.
      $templateName = basename(get_page_template_slug(get_the_ID()));
      $templateName = str_ireplace('template-', '', basename(get_page_template_slug(get_the_ID()), '.php'));

      $classes[] = $templateName;
  }

  return array_filter($classes);
}

Notez que vous pouvez utiliser une fermeture pour cela plutôt qu’un nom de fonction accroché et une fonction indépendante, mais étant donné que différentes personnes lisant ceci utilisent différentes versions de PHP, le moyen le plus simple de le démontrer est de l’utiliser ci-dessus.

Pourquoi faire ceci?

De manière générale, si votre page porte le même nom que le modèle appliqué, elle aura un nom de classe qui correspond au nom de la page.

Autrement dit, disons que vous avez une page et son nom est la perte de poids. L’ bodyélément aura une weight lossclasse. Mais si vous utilisez un deuxième, un troisième, un quatrième ou plus sur une page qui a un titre différent, elle n’aura pas cette classe.

Si vous voulez vous assurer que le bodynom de la classe est basé sur le modèle, le code ci-dessus garantira que cela fonctionne.

Source d’enregistrement: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More