Adición de una clase de cuerpo basada en una plantilla
Trabajar con plantillas en WordPress es algo que no es raro. Todo es una especie de plantilla, desde la plantilla de la página principal, la plantilla de una sola página, la plantilla 404, hasta las plantillas personalizadas.
A veces, sin embargo, es posible que desee aplicar una clase al bodyelemento en función de la plantilla que se está utilizando para que pueda diseñar esta plantilla en particular de manera un poco diferente al resto del sitio.
Aunque puedes hacerlo de varias maneras diferentes, todos tenemos nuestros métodos para hacerlo, así que pensé en compartir el mío.
Clase de cuerpo basada en una plantilla
Antes de saltar al código para agregar una clase de cuerpo basada en una plantilla, es importante tener en cuenta que asumo que la plantilla tiene el siguiente formato: template-{name-of-template}.php.
Entonces, supongamos que está trabajando en una plantilla para mostrar información sobre el peso que ha perdido en un mes y desea hacerlo usando una plantilla para esto. La plantilla puede tener el nombre template-weight-loss.php.
Aquí está la cosa: aplicar el nombre de la clase a una sola página que usa esta plantilla no es gran cosa. Pero si tiene varias páginas que usan esta plantilla (lo cual, si ejecuta un sitio en el que muchas personas pueden estar usando esta plantilla, tiene sentido, ¿no?), Entonces querrá asegurarse de aplicar el nombre de la clase. a cada página que como esta plantilla.
¿Pero cómo?
Hay varias formas de hacerlo, pero requiere al menos lo siguiente:
- Engancharse al gancho body_class que proporciona WordPress,
- Leyendo el nombre de la plantilla,
- Aplicándolo al nombre de clase del cuerpo (si la página está usando la plantilla)
Afortunadamente, es fácil de hacer porque el enlace pasa una serie de clases a una función enlazada y los metadatos de una publicación determinada incluyen si está usando una plantilla o no.
Dicho esto, así es como se puede lograr esto:
<?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);
}
Tenga en cuenta que puede usar un cierre para esto en lugar de un nombre de función enganchado y una función independiente, pero dado que diferentes personas que leen esto usan diferentes versiones de PHP, la forma más fácil de demostrar esto es usarlo arriba.
¿Por qué hacer esto?
En términos generales, si su página tiene el mismo nombre que la plantilla que se está aplicando, tendrá un nombre de clase que coincida con el nombre de la página.
Es decir, digamos que tiene una página y su nombre es Pérdida de peso. El bodyelemento tendrá una weight lossclase. Pero si usa un segundo, tercero, cuarto, etc. en una página que tiene un título diferente, no tendrá esa clase.
Si desea asegurarse de que bodytenga el nombre de clase basado en la plantilla, el código anterior garantizará que esto funcione.