Хук wp_after_load_template
в WordPress запускается после подключения шаблона и позволяет выполнять действия после загрузки определенного шаблона. Этот хук может быть полезен для оптимизации, логирования времени загрузки шаблонов или добавления определенных параметров после вызова шаблона.
do_action( ‘wp_after_load_template’, string $_template_file, bool $load_once, array $args )
Хук wp_after_load_template
применяется в функциях WordPress, которые работают с шаблонами, таких как locate_template()
, get_template_part()
, get_header()
и get_footer()
. Он может использоваться совместно с хуком wp_before_load_template
, что открывает возможности для измерения времени выполнения каждого шаблона.
Параметры
$_template_file
— строка, содержащая полный путь к загруженному шаблону (например,/home/site/www/wp-content/themes/mytheme/myfile.php
).$load_once
— логическое значение (true
илиfalse
), указывающее, загружен ли шаблон с помощьюrequire_once
илиrequire
.$args
— массив с дополнительными параметрами, переданными в шаблон.
Пример 1: Измерение времени загрузки каждого шаблона
С помощью хуков wp_before_load_template
и wp_after_load_template
можно замерить время, затраченное на загрузку каждого шаблона. Этот подход может быть полезен при разработке и отладке сайтов, чтобы понять, какие шаблоны требуют больше ресурсов.
// Устанавливаем время перед загрузкой шаблона
add_action('wp_before_load_template', 'measure_template_load_time');
// Устанавливаем время после загрузки шаблона
add_action('wp_after_load_template', 'measure_template_load_time');
// Выводим результаты в лог после завершения работы
register_shutdown_function('measure_template_load_time');
function measure_template_load_time($template_file = null) {
static $start_times = [];
static $load_results = [];
if (doing_action('wp_before_load_template')) {
$start_times[$template_file] = microtime(true);
return;
}
if (doing_action('wp_after_load_template')) {
$load_results[$template_file][] = sprintf('%.5f sec.', microtime(true) - $start_times[$template_file]);
return;
}
// Логируем данные в файл
error_log(print_r($load_results, true));
}
Пример вывода лога:
Array
(
[.../templates/header.php] => Array
(
[0] => 0.00413 sec.
)
[.../templates/content.php] => Array
(
[0] => 0.00294 sec.
)
[.../templates/footer.php] => Array
(
[0] => 0.00372 sec.
)
)
Пример 2: Логирование подключенных шаблонов
Если требуется отслеживать, какие шаблоны подключаются на странице, можно воспользоваться этим хуком для записи полного пути загружаемого шаблона в лог.
// Логируем путь загруженного шаблона
add_action('wp_after_load_template', 'log_loaded_template_path', 10, 3);
function log_loaded_template_path($_template_file, $load_once, $args) {
$log_message = "Шаблон загружен: {$_template_file}, ";
$log_message .= $load_once ? 'однократно' : 'многократно';
error_log($log_message);
}
Результат в логе может быть таким:
Шаблон загружен: /home/site/www/wp-content/themes/mytheme/content-page.php, однократно
Шаблон загружен: /home/site/www/wp-content/themes/mytheme/footer.php, однократно
Пример 3: Передача и использование дополнительных параметров
Хук позволяет передавать параметры через $args
, что можно использовать для настройки шаблона после его загрузки.
// Передаем и используем дополнительные параметры
add_action('wp_after_load_template', 'apply_custom_template_args', 10, 3);
function apply_custom_template_args($_template_file, $load_once, $args) {
if ($_template_file === get_template_directory() . '/custom-template.php') {
$background_color = isset($args['background_color']) ? $args['background_color'] : 'default';
echo "<style>body { background-color: {$background_color}; }</style>";
}
}
// Пример вызова шаблона с параметрами
$args = ['background_color' => '#f5f5f5'];
load_template(get_template_directory() . '/custom-template.php', true, $args);
В данном примере передается параметр background_color
, который затем используется для изменения цвета фона на странице с подключаемым шаблоном custom-template.php
.
Пример 4: Условное добавление отладочной информации
Иногда может быть полезно включать отладочную информацию только на определенных страницах или при загрузке определенного шаблона.
// Добавляем отладочную информацию для конкретного шаблона
add_action('wp_after_load_template', 'debug_template_info', 10, 3);
function debug_template_info($_template_file, $load_once, $args) {
if ($_template_file === get_template_directory() . '/debug-template.php') {
error_log("Debug Info: Template {$_template_file} loaded with args: " . print_r($args, true));
}
}
В этом примере отладочная информация будет записана только при загрузке шаблона debug-template.php
, что позволит сфокусироваться на конкретной части кода.
Заключение
Хук wp_after_load_template
— это мощный инструмент для работы с шаблонами в WordPress, который может помочь оптимизировать производительность, добавить дополнительные параметры, логировать информацию о шаблонах и многое другое. Его применение, в сочетании с wp_before_load_template
, позволяет разработчикам получить полный контроль над процессом подключения шаблонов и значительно упростить диагностику потенциальных проблем на сайте.