WordPress
template_include
Поиск…
параметры
параметр | объяснение |
---|---|
$template | Пропускает один параметр в фильтр, $template - это текущий путь к соответствующему файлу для типа сообщения, найденного в активной дочерней теме или родительской теме (если ни одна дочерняя тема не установлена или дочерняя тема имеет более ранние шаблоны). См. Иерархию шаблонов Wordpress Больше подробностей). |
замечания
Вы должны вернуть $template
даже если не изменять. Если это вас смущает, посмотрите примеры, где apply_filter()
используется в коде
Вы не должны настраивать переменные здесь для использования позже, для этого есть лучшие крючки.
Полезный программный поток для этого фильтра:
-
$template
включает наше настраиваемое имя типа письма -> иерархия шаблонов! - если нет, найдите наш плагин для подходящих файлов -> Лучше указывать на определенные файлы, а не искать через папки для файлов. Более эффективным. Но полностью до разработчика.
- верните шаблон.
Простой пример
Этот фильтр очень полезен. Одной из распространенных проблем для разработчиков является включение шаблонов в плагины, которые они разрабатывают.
Фильтр применяется сразу же после того, как wordpress находит соответствующий шаблон в активной дочерней / родительской теме, используя иерархию wp.
Будьте осторожны, чтобы определить, когда вы хотите изменить путь к шаблону. В приведенном ниже примере код проверяет, является ли текущая страница единственным видом нашего настраиваемого типа сообщений cpt
.
Простой пример для начала!
add_filter('template_include', 'custom_function');
function custom_function($template){
//change a single post template...
if( is_singular('cpt') ){
$template= 'path/to/another/template_file';
}
return $template;
}
Пример больше
add_filter('template_include', 'custom_function');
function custom_function($template){
/*
* This example is a little more advanced.
* It will check to see if $template contains our post-type in the path.
* If it does, the theme contains a high level template e.g. single-cpt.php
* If not we look in the plugin parent folder for the file. e.g. single-cpt.php
*/
//check to see if the post type is in the filename (high priority file)
//return template if it is!
global $post;
if( strpos($template, 'single-'.$post->post_type.'php' ) !== false && strpos($template, 'archive-'.$post->post_type.'php' ) !== false ){
return $template;
}
$plugin_path = 'var/etc/wp-content/plugins/plugin'; //include own logic here...
if( is_singular($post->post_type) && file_exists($plugin_path.'/single-'.$post->post_type.'.php') ){
$template= $plugin_path.'/single-'.$post->post_type.'.php';
} elseif ( is_archive($post->post_type) && file_exists($plugin_path.'/archive-'.$post->post_type.'.php') ) {
$template= $plugin_path.'/archive-'.$post->post_type.'.php';
}
return $template;
}