Хитрість: динамічне закриття тегів у темі

Мені здалося, що хитрість описана тут – це зручно і не всі нею користуються. Крім того, прийом з цієї статті можна використовувати в інших випадках і думаю тримати його у своїй скарбничці знань, щоб використовувати у будь-який момент, потрібно.

Не скажу, що я робив багато тим і часом мене це дратувало, а скажу, – я робив не так багато тем, але щоразу мене це дратувало. Дратувався я доти, доки якось мене не осяяло і придумалася ця хитрість. Я чомусь не подумав писати про це, поки нещодавно не подумав, – а чому я раніше не подумав про це написатиsmile

А тепер по-порядку…

Кожен хто створював тему для 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() працює блискавично, тому якщо у когось виникне питання продуктивності, здавалося б, непотрібному місці, то це зайве…

На цьому все, підписуйтесь, ставте лайки і щось там…

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *