Прежде, чем мы перейдем к более сложным модификациям нашей темы, посмотрим на то, как взаимодействуют между собой хуки и файлы шаблона для создания разметки. Откроем файл single.php, который отвечает за отображение отдельной записи:
<?php// calling the header.php get_header();// action hook for placing content above #container thematic_abovecontainer();?><div id="container"><?php thematic_abovecontent(); ?><div id="content"> <?php the_post(); // create the navigation above the content thematic_navigation_above(); // calling the widget area 'single-top' get_sidebar('single-top'); // action hook creating the single post thematic_singlepost(); // calling the widget area 'single-insert' get_sidebar('single-insert'); // create the navigation below the content thematic_navigation_below(); // calling the comments template thematic_comments_template(); // calling the widget area 'single-bottom' get_sidebar('single-bottom'); ?> </div><!-- #content --> <?php thematic_belowcontent(); ?> </div><!-- #container --> <?php // action hook for placing content below #container thematic_belowcontainer(); // calling the standard sidebar thematic_sidebar(); // calling footer.php get_footer(); ?>
Фунция thematic_singlepost отвечает за вывод полной записи. Выполнив поиск по всему каталогу Thematic, обнаруживаем, что объявление функции находится в файле library/extensions/content-extensions.php:
// Located in single.php // The Post function thematic_singlepost() { do_action('thematic_singlepost'); } //end thematic_singlepost
do_action сообщает механизму WordPress, что действие имело место. Таким образом, активируется выполнение подцепленных функций. Для того, чтобы понять в деталях, как именно это работает, разобьем действие на отдельные пункты:
1. Когда WordPress начинает обрабатывать файл шаблона single.php, он сталкивается с вызовом функции thematic_singlepost().
2. При запуске указанной функции Thematic сообщает WordPress о выполнении действия thematic_singlepost.
3. Начиная с этого момента, все функции, которые были подцеплены к хуку через do_action, будут выполнены.
Для того, чтобы узнать, что дальше будет делать Thematic, необходимо отыскать функции, которые были сцеплены с хуком. Следующее вхождение строки «thematic_singlepost» находится в том же самом файле:
add_action('thematic_singlepost', 'thematic_single_post');
Это и есть необходимый нам вызов add_action. Он сообщает WordPress, что после того как событие thematic_singlepost произошло, нужно вызвать функцию thematic_single_post. Сама функция расположена над вызовом add_action:
function thematic_single_post() { ?> <div id="post-<?php the_ID(); ?>"> <?php thematic_postheader(); ?> <div> <?php thematic_content(); ?> <?php wp_link_pages('before=<div>' . ?__('Pages:', 'thematic') . '&after=</div>') ?> </div> <?php thematic_postfooter(); ?> </div><!-- .post --> <?php }
Несмотря на то, что одну из функций мы нашли, код содержит вызов других функций, которые также спрятаны в папках Thematic. Некоторые из них, такие как, к примеру, thematic_content, находятся в папке library фреймворка Thematic. Другие — к примеру, wp_link_pages, — относятся к встроенной функциональности WordPress. Однако, как первый, так и второй вид функций выполняют схожие задачи: отвечают за представление отдельной записи. Запись состоит из: блока div с несколькими классами и собственным идентификатором; функции, отвечающей за вывод заголовка записи; блока div с контентом; функции, отвечающей за вывод нижней части записи.
Для того, чтобы узнать, как работает одна маленькая функция, нам пришлось перерыть множество различных файлов. Одна функция вызывает другую функцию, а та, в свою очередь, вызывает третью — настоящая «матрешка» из функций. На самом деле, ничего странного в такой структуре нет. Все функциональные элементы разбиты на небольшие обособленные блоки, которые затем можно быстро и легко использовать в различных частях шаблонов, что обеспечивает высокую гибкость при редактировании материалов.