Включить файл перед текущим файлом шаблона

Я хотел бы включить два файла до и после текущего шаблона. Я использую template_redirect для этого,

Но когда я вызываю get_current_template() внутри template_redirect он ничего не возвращает.

есть ли способ решить это?

вот мой код:

 // current template file add_filter( 'template_include', 'var_template_include', 1000 ); function var_template_include( $t ){ $GLOBALS['current_theme_template'] = basename($t); return $t; } function get_current_template() { if( !isset( $GLOBALS['current_theme_template'] ) ) return false; if( $echo ) echo $GLOBALS['current_theme_template']; else return $GLOBALS['current_theme_template']; } // use template redirect to include file add_action('template_redirect', 'ra_template_block'); function ra_template_block() { include_once THEME_DIR.'/blockstop.php'; get_template_part(get_current_template()); include_once THEME_DIR.'/blocks.php'; exit; } 

Я делаю это, я хочу установить макет страницы из файла. Мне нужно включать ниже тегов каждый раз в файл шаблона:

  • get_header()
  • get_footer()
  • get_sidebar()
  • get_template_part('right')
  • get_template_part('left')

Поэтому, если я могу установить их из определенного файла, тогда мне не нужно включать их в каждый файл шаблона.

Solutions Collecting From Web of "Включить файл перед текущим файлом шаблона"

template_redirect запускается до template_include . Вы можете продемонстрировать это следующим образом:

 add_filter( 'template_include', 'var_template_include', 1000 ); function var_template_include( $t ){ echo __FUNCTION__; } // use template redirect to include file add_action('template_redirect', 'ra_template_block'); function ra_template_block() { echo __FUNCTION__; } 

Или вы можете просто посмотреть на источник: http://core.trac.wordpress.org/browser/tags/3.5.2/wp-includes/template-loader.php

Поскольку ваш код exit s в template_redirect global что get_current_template зависит от того, никогда не будет установлен, и даже если вы не exit это будет слишком поздно.

Вам нужно, чтобы путь шаблона передавался в template_include поэтому, если вы просто привязываете оба фильтра к этому крючку и присваиваете им приоритет, чтобы он всегда загружался раньше другого, это должно работать, по крайней мере, в качестве настройки и получения этого global .

 // current template file add_filter( 'template_include', 'var_template_include', 1000 ); function var_template_include( $t ){ var_dump($t); $GLOBALS['current_theme_template'] = basename($t); return $t; } // use template redirect to include file add_action('template_include', 'ra_template_block', 1001); function ra_template_block() { // include_once THEME_DIR.'/blockstop.php'; var_dump(get_template_part(get_current_template())); // include_once THEME_DIR.'/blocks.php'; exit; } 

Разумеется, для двух фильтров нет реальной причины. Можно было бы так же хорошо.