✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Добавление класса тела на основе шаблона

20

Работа с шаблонами в WordPress — не редкость. Все является своего рода шаблоном — от шаблона главной страницы, шаблона одной страницы, шаблона 404 — вплоть до пользовательских шаблонов.

Однако иногда вам может понадобиться применить класс к bodyэлементу на основе используемого шаблона, чтобы вы могли оформить этот конкретный шаблон немного иначе, чем остальную часть сайта.

Хотя вы можете сделать это разными способами, у всех нас есть свои методы, поэтому я решил поделиться своим.

Класс кузова на основе шаблона

Прежде чем перейти к коду добавления класса body на основе шаблона, важно отметить, что я предполагаю, что имя шаблона имеет следующий формат: template-{name-of-template}.php.

Итак, допустим, вы работаете над шаблоном для отображения информации о весе, который вы потеряли за месяц, и вы хотите сделать это, используя шаблон для этого. Шаблон может называться template-weight-loss.php.

Вот в чем дело: применение имени класса к одной странице, использующей этот шаблон, не представляет большой проблемы. Но если у вас есть несколько страниц, которые используют этот шаблон (что, если вы запускаете сайт, на котором многие люди могут использовать этот шаблон, имеет смысл, верно?), то вам нужно убедиться, что вы применяете имя класса на каждую страницу, что в качестве этого шаблона.

Но как?

Есть несколько способов сделать это, но для этого требуется, по крайней мере, следующее:

  1. Подключившись к хуку body_class WordPress,
  2. Прочитав название шаблона,
  3. Применение его к имени класса тела (если страница использует шаблон)

К счастью, это легко сделать, потому что хук передает массив классов в функцию хука, а метаданные данного поста включают, использует ли он шаблон.

С учетом сказанного, вот как этого можно достичь:

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

Обратите внимание, что для этого вы можете использовать замыкание, а не перехваченное имя функции и независимую функцию, но, учитывая, что разные люди, читающие это, используют разные версии PHP, самый простой способ продемонстрировать это — использовать его выше.

Зачем это делать?

Вообще говоря, если ваша страница имеет то же имя, что и применяемый шаблон, то она будет иметь имя класса, совпадающее с именем страницы.

То есть, допустим, у вас есть одна страница и она называется «Похудение». Элемент bodyбудет иметь weight lossкласс. Но если вы используете второй, третий, четвертый или около того на странице с другим заголовком, у нее не будет этого класса.

Если вы хотите убедиться body, что имя класса основано на шаблоне, приведенный выше код гарантирует, что это работает.

Источник записи: tommcfarlin.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее