✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Hinzufügen einer Körperklasse basierend auf einer Vorlage

13

Das Arbeiten mit Vorlagen in WordPress ist nichts Ungewöhnliches. Alles ist eine Art Vorlage – von der Hauptseitenvorlage, Einzelseitenvorlage, 404-Vorlage – bis hin zu benutzerdefinierten Vorlagen.

Manchmal möchten Sie jedoch möglicherweise eine Klasse auf das bodyElement anwenden, das auf der verwendeten Vorlage basiert, damit Sie diese bestimmte Vorlage etwas anders gestalten können als den Rest der Website.

Obwohl Sie es auf verschiedene Arten tun können, haben wir alle unsere Methoden, also dachte ich, ich würde meine teilen.

Körperklasse basierend auf einer Vorlage

Bevor Sie in den Code zum Hinzufügen einer Body-Klasse auf der Grundlage einer Vorlage einsteigen, ist es wichtig zu beachten, dass ich davon ausgehe, dass die Vorlage im folgenden Format benannt ist: template-{name-of-template}.php.

Angenommen, Sie arbeiten an einer Vorlage zur Anzeige von Informationen über das Gewicht, das Sie in einem Monat verloren haben, und möchten dies mithilfe einer Vorlage tun. Die Vorlage kann benannt werden template-weight-loss.php.

Hier ist die Sache: Das Anwenden des Klassennamens auf eine einzelne Seite, die diese Vorlage verwendet, ist keine große Sache. Aber wenn Sie mehrere Seiten haben, die diese Vorlage verwenden (was, wenn Sie eine Website betreiben, auf der viele Leute diese Vorlage verwenden, es sinnvoll ist, oder?), dann sollten Sie sicherstellen, dass Sie den Klassennamen anwenden zu jeder Seite, die als diese Vorlage.

Aber wie?

Es gibt eine Reihe von Möglichkeiten, wie Sie dies tun können, aber es erfordert mindestens Folgendes:

  1. Einhaken in den body_class- Hook, den WordPress bereitstellt,
  2. Den Namen der Vorlage lesen,
  3. Anwenden auf den Klassennamen des Körpers (wenn die Seite die Vorlage verwendet)

Glücklicherweise ist dies einfach, da der Hook ein Array von Klassen an eine Hook-Funktion übergibt und die Metadaten eines bestimmten Beitrags enthalten, ob er eine Vorlage verwendet oder nicht.

Vor diesem Hintergrund kann dies wie folgt erreicht werden:

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

Beachten Sie, dass Sie dafür eine Closure verwenden können, anstatt einen Funktionsnamen und eine unabhängige Funktion, aber da verschiedene Personen, die dies lesen, unterschiedliche Versionen von PHP verwenden, ist der einfachste Weg, dies zu demonstrieren, die Verwendung oben.

Warum tun Sie dies?

Wenn Ihre Seite denselben Namen wie die angewendete Vorlage hat, wird sie im Allgemeinen einen Klassennamen haben, der mit dem Namen der Seite übereinstimmt.

Nehmen wir an, Sie haben eine Seite mit dem Namen Weight Loss. Das bodyElement wird eine weight lossKlasse haben. Aber wenn Sie eine zweite, dritte, vierte oder ähnliche Seite auf einer Seite verwenden, die einen anderen Titel hat, hat sie diese Klasse nicht.

Wenn Sie sicherstellen möchten, dass bodyder Klassenname auf der Vorlage basiert, stellt der obige Code sicher, dass dies funktioniert.

Aufnahmequelle: tommcfarlin.com

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen