Хук wp_before_load_template
в WordPress срабатывает непосредственно перед загрузкой шаблона. Это дает возможность выполнять дополнительные действия или собирать информацию до того, как сам шаблон будет подключен. Такой подход может быть полезен для отладки, мониторинга производительности или динамического изменения поведения загрузки шаблонов.
do_action( ‘wp_before_load_template’, string $_template_file, bool $load_once, array $args )
Хук wp_before_load_template
вызывается в процессе загрузки шаблонов через такие функции, как locate_template()
, get_template_part()
, get_header()
, и get_footer()
. Этот хук позволяет разработчикам добавлять свои функции перед загрузкой определенных шаблонов, а также в сочетании с хуком wp_after_load_template
дает возможность замерять время, необходимое для загрузки каждого шаблона.
Параметры
$_template_file
— строка, представляющая полный путь к файлу шаблона (например,/home/site/www/wp-content/themes/mytheme/template.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('%.6f sec.', microtime(true) - $start_times[$template_file]);
return;
}
// Логируем данные в файл
error_log(print_r($load_results, true));
}
Пример вывода лога может выглядеть так:
Array
(
[.../templates/parts/header.php] => Array
(
[0] => 0.00123 sec.
)
[.../templates/content.php] => Array
(
[0] => 0.00234 sec.
)
[.../templates/footer.php] => Array
(
[0] => 0.00456 sec.
)
)
Пример 2: Логирование загружаемых шаблонов
Можно логировать, какие шаблоны загружаются на странице, чтобы легче отслеживать их использование.
// Логируем путь к загружаемому шаблону
add_action('wp_before_load_template', 'log_template_path', 10, 3);
function log_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/page.php, однократная загрузка
Шаблон загружается: /home/site/www/wp-content/themes/mytheme/header.php, многократная загрузка
Пример 3: Передача и использование дополнительных параметров
Хук также позволяет передавать параметры, которые могут быть использованы для изменения поведения шаблона перед его загрузкой.
// Передаем и используем дополнительные параметры
add_action('wp_before_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') {
$custom_setting = isset($args['custom_setting']) ? $args['custom_setting'] : 'default';
echo "<style>body { background-color: {$custom_setting}; }</style>";
}
}
// Пример вызова шаблона с параметрами
$args = ['custom_setting' => '#f0f0f0'];
load_template(get_template_directory() . '/custom-template.php', true, $args);
В этом примере передается параметр custom_setting
, который затем используется для изменения цвета фона страницы.
Пример 4: Условная обработка для конкретного шаблона
Хук может быть полезен для выполнения определенных действий только для специфических шаблонов.
// Добавляем условную логику для конкретного шаблона
add_action('wp_before_load_template', 'conditional_template_action', 10, 3);
function conditional_template_action($_template_file, $load_once, $args) {
if ($_template_file === get_template_directory() . '/specific-template.php') {
// Выполняем действия только для конкретного шаблона
error_log("Выполняем действия для specific-template.php");
}
}
В данном случае логи будут записываться только при загрузке шаблона specific-template.php
.
Заключение
Хук wp_before_load_template
является мощным инструментом для работы с шаблонами в WordPress, позволяя разработчикам выполнять различные действия до их загрузки. Его использование, в сочетании с хуком wp_after_load_template
, открывает возможности для детального мониторинга и оптимизации работы шаблонов, что в конечном итоге может привести к повышению производительности вашего сайта.