Mallien käyttäminen WordPressissä ei ole harvinaista. Kaikki on eräänlaista mallia – pääsivun mallista, yhden sivun mallista, 404-mallipohjasta – aina mukautettuihin malleihin.
Joskus saatat kuitenkin haluta soveltaa bodyelementtiin luokkaa käytetyn mallin perusteella, jotta voit muotoilla tämän mallin hieman eri tavalla kuin muualla sivustossa.
Vaikka voit tehdä sen useilla eri tavoilla, meillä kaikilla on omat menetelmämme, joten ajattelin jakaa omani.
Vartaloluokka mallin perusteella
Ennen kuin ryhdyt käyttämään koodia, jolla lisätään mallipohjaan perustuva body-luokka, on tärkeää huomata, että oletan, että malli on nimetty seuraavassa muodossa: template-{name-of-template}.php.
Oletetaan siis, että työskentelet mallin parissa, joka näyttää tiedot kuukaudessa laihduttamasi painosta, ja haluat tehdä sen käyttämällä tätä mallia. Malli voi olla nimetty template-weight-loss.php.
Asia on tässä: Luokan nimen käyttäminen yhdelle sivulle, joka käyttää tätä mallia, ei ole iso juttu. Mutta jos sinulla on useita sivuja, jotka käyttävät tätä mallia (jos käytät sivustoa, jossa monet ihmiset saattavat käyttää tätä mallia, se on järkevää, eikö?), sinun kannattaa varmistaa, että käytät luokan nimeä jokaiselle sivulle, joka on tämä malli.
Mutta miten?
Voit tehdä tämän useilla tavoilla, mutta se vaatii ainakin seuraavat:
- Kiinnitys body_class- koukkuun WordPress tarjoaa,
- Kun luet mallin nimen,
- Sen käyttäminen rungon luokan nimeen (jos sivu käyttää mallia)
Onneksi se on helppo tehdä, koska koukku välittää joukon luokkia koukussa olevaan funktioon ja tietyn viestin metatiedot sisältävät sen, käytetäänkö se mallia vai ei.
Näin sanottuna tämä voidaan saavuttaa:
<?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);
}
Huomaa, että voit käyttää tähän sulkemista mieluummin kuin funktion nimeä koukussa ja itsenäisen funktion, mutta koska eri ihmiset, jotka lukevat tätä, käyttävät eri PHP-versioita, helpoin tapa osoittaa tämä on käyttää sitä yllä.
Miksi tehdä näin?
Yleisesti ottaen, jos sivullasi on sama nimi kuin mallilla, jota käytetään, sillä on sivun nimeä vastaava luokan nimi.
Oletetaan, että sinulla on yksi sivu ja sen nimi on Painonpudotus. Elementillä bodyon weight lossluokka. Mutta jos käytät toista, kolmatta, neljättä tai vastaavaa sivulla, jolla on eri otsikko, sillä ei ole kyseistä luokkaa.
Jos haluat varmistaa, bodyettä luokan nimi perustuu malliin, yllä oleva koodi varmistaa, että tämä toimii.