Mallidega töötamine WordPressis on midagi, mis pole haruldane. Kõik on omamoodi mallid – alates põhilehe mallist, ühe lehe mallist ja 404 mallist – kuni kohandatud mallideni.
Mõnikord võite siiski soovida bodykasutataval mallil põhinevale elemendile klassi rakendada, et saaksite selle konkreetse malli stiili muuta kui ülejäänud saidil.
Kuigi saate seda teha mitmel erineval viisil, on meil kõigil oma meetodid, nii et mõtlesin, et jagan oma meetodeid.
Kehaklass malli alusel
Enne mallil põhineva kehaklassi lisamise koodi juurde hüppamist on oluline märkida, et ma eeldan, et malli nimi on järgmises vormingus: template-{name-of-template}.php.
Oletame, et töötate kuu aja jooksul kaotatud kaalu kohta teabe kuvamiseks malli kallal ja soovite seda teha, kasutades selleks malli. Malli võib nimetada template-weight-loss.php.
Asi on siin: klassi nime rakendamine ühele seda malli kasutavale lehele ei ole suurem asi. Aga kui teil on mitu lehte, mis kasutavad seda malli (mis on mõistlik, kui kasutate saiti, kus paljud inimesed võivad seda malli kasutada, eks?), siis peate kindlasti kasutama klassi nime igale lehele, mis on selle mallina.
Aga kuidas?
Seda saate teha mitmel viisil, kuid selleks on vaja vähemalt järgmist.
- Haakimine body_class konksuga, mida WordPress pakub,
- Malli nime lugemine,
- Selle rakendamine keha klassi nimele (kui leht kasutab malli)
Õnneks on seda lihtne teha, sest konks edastab hulga klasse konksuga funktsiooni ja antud postituse metaandmed sisaldavad seda, kas see kasutab malli või mitte.
Seda on võimalik saavutada järgmiselt.
<?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);
}
Pange tähele, et selle jaoks võite kasutada pigem sulgemist kui funktsiooni nime konksuga ja sõltumatut funktsiooni, kuid kuna erinevad seda lugevad inimesed kasutavad PHP erinevaid versioone, on lihtsaim viis selle demonstreerimiseks kasutada seda ülalpool.
Miks seda teha?
Üldiselt, kui teie lehel on sama nimi, mis rakendataval mallil, siis on sellel klassi nimi, mis ühtib lehe nimega.
See tähendab, oletame, et teil on üks leht ja selle nimi on Weight Loss. Elemendil bodyon weight lossklass. Kuid kui kasutate teist, kolmandat, neljandat või nii mõndagi teistsuguse pealkirjaga lehel, pole sellel seda klassi.
Kui soovite veenduda, bodyet klassi nimi põhineb mallil, siis ülaltoodud kood tagab selle toimimise.