✅ WEB- und WordPress-Nachrichten, Themen, Plugins. Hier teilen wir Tipps und beste Website-Lösungen.

Додавання класу тіла на основі шаблону

10

Робота з шаблонами в WordPress – це не рідкість. Усе є свого роду шаблоном – від шаблону головної сторінки, односторінкового шаблону, шаблону 404 – аж до спеціальних шаблонів.

Іноді, однак, ви можете застосувати клас до 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

Diese Website verwendet Cookies, um Ihre Erfahrung zu verbessern. Wir gehen davon aus, dass Sie damit einverstanden sind, Sie können sich jedoch abmelden, wenn Sie möchten. Annehmen Weiterlesen