Хитрість: динамічне закриття тегів у темі
Мені здалося, що хитрість описана тут – це зручно і не всі нею користуються. Крім того, прийом з цієї статті можна використовувати в інших випадках і думаю тримати його у своїй скарбничці знань, щоб використовувати у будь-який момент, потрібно.
Не скажу, що я робив багато тим і часом мене це дратувало, а скажу, – я робив не так багато тем, але щоразу мене це дратувало. Дратувався я доти, доки якось мене не осяяло і придумалася ця хитрість. Я чомусь не подумав писати про це, поки нещодавно не подумав, – а чому я раніше не подумав про це написати
А тепер по-порядку…
Кожен хто створював тему для WordPress, напевно, стикався з ситуацією: є структура сторінки, такого роду:
<?php get_header(); ?> <div id="content"> <!-- цикл виведення або ще якийсь висновок контенту --> </div><!--#content--> <?php get_sidebar(); get_footer();
І ця структура використовується для всіх видів сторінок: home.php, page.php, single.php, archive.php, category.php, search.php, 404.php, page-name.php і т.д. Тобто. яку б ми сторінку не створювали, вона матиме таку структуру.
Звідси виникає питання, а чому б не сховати теги <div id=”content”> у шапку та </div><!–#content–> у сайдбар. Все одно скрізь однакова структура, чого їх повторювати у всіх файлах шаблону. Нехай лежать у одному файлі. І тоді структура виглядатиме простіше:
<?php get_header(); // цикл виведення або ще якийсь висновок контенту get_sidebar(); get_footer();
Але якщо так зробити, то виходить ми ніде не можемо прибрати сайдбар: get_sidebar(); . Тому що в ньому знаходиться важливий тег, що закриває. А прибирати його потрібно, а якщо і не потрібно, то, можливо, буде потрібно в майбутньому.
Поки не почали читати нижче, подумайте самі, як можна засунути ці теги у спільні файли header.php, sidebar.php чи footer.php так, щоби наявність чи відсутність сайдбару нічого не ламало?
Рішення
Рішення дуже просте і полягає воно у використанні не всім відомої функції did_action() .
Потрібно помістити <div id=”content”> у файл header.php і помістити </div><!–#content–> у файл sidebar.php . А далі продублювати показ </div><!–#content–> у файлі footer.php , але з умовою – виводити цей тег тільки якщо не була викликана функція get_sidebar() , в якій спрацьовує хук get_sidebar …
Тобто. код на початку footer.php буде виглядати так:
// якщо сайдбар не викликався, то потрібні теги не закриті - закриємо... if( ! did_action('get_sidebar') ) echo '</div><!--#content-->';
did_action() працює блискавично, тому якщо у когось виникне питання продуктивності, здавалося б, непотрібному місці, то це зайве…
На цьому все, підписуйтесь, ставте лайки і щось там…