✅ WEB- och WordPress -nyheter, teman, plugins. Här delar vi tips och bästa webbplatslösningar.

Lägga till en kroppsklass baserat på en mall

19

Att arbeta med mallar i WordPress är något som inte är ovanligt. Allt är en sorts mall – från huvudsidesmallen, ensidig mall, 404-mall – hela vägen till anpassade mallar.

Men ibland kanske du vill tillämpa en klass på bodyelementet baserat på mallen som används så att du kan utforma just den här mallen lite annorlunda än resten av webbplatsen.

Även om du kan göra det på ett antal olika sätt, för att göra det har vi alla våra metoder så jag tänkte dela med mig av mina.

Kroppsklass baserad på en mall

Innan du hoppar in i koden för att lägga till en kroppsklass baserad på en mall är det viktigt att notera att jag antar att mallen heter i följande format: template-{name-of-template}.php.

Så låt oss säga att du arbetar på en mall för att visa information om vikten du har gått ner på en månad och du vill göra det med en mall för detta. Mallen kan få ett namn template-weight-loss.php.

Här är grejen: Att tillämpa klassnamnet på en enda sida som använder den här mallen är inte en stor sak. Men om du har flera sidor som använder den här mallen (som, om du kör en webbplats där många människor kan använda den här mallen, är det vettigt, eller hur?) så vill du se till att du använder klassnamnet till varje sida som den här mallen.

Men hur?

Det finns ett antal sätt på vilket du kan göra detta, men det kräver åtminstone följande:

  1. Att ansluta till body_class- kroken WordPress ger,
  2. Läser mallens namn,
  3. Tillämpa det på klassnamnet på kroppen (om sidan använder mallen)

Lyckligtvis är det lätt att göra eftersom kroken skickar en rad klasser till en kopplad funktion och ett givet inläggs metadata inkluderar om det använder en mall eller inte.

Med det sagt, så här kan detta uppnås:

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

Observera att du kan använda en stängning för detta snarare än ett funktionsnamn kopplat och en oberoende funktion, men med tanke på att olika personer som läser detta använder olika versioner av PHP, är det enklaste sättet att visa detta att använda det ovan.

Varför göra detta?

Generellt sett, om din sida har samma namn som mallen som används kommer den att ha ett klassnamn som matchar namnet på sidan.

Det vill säga, låt oss säga att du har en sida och dess namn är Viktminskning. Elementet bodykommer att ha en weight lossklass. Men om du använder en andra, tredje, fjärde eller så på en sida som har en annan titel, kommer den inte att ha den klassen.

Om du vill säkerställa att klassnamnet bodyär baserat på mallen, kommer koden ovan att säkerställa att detta fungerar.

Inspelningskälla: tommcfarlin.com

Denna webbplats använder cookies för att förbättra din upplevelse. Vi antar att du är ok med detta, men du kan välja bort det om du vill. Jag accepterar Fler detaljer