我正在设置路由但索引的页面模板。php总是遵循自定义模板,是不是因为它是“include\\uux”?感觉应该是“set\\uuu”或“load\\uu”。。。我想用我的模板替换输出,而不仅仅是在输出中包含我的模板。
add_action(\'template_include\', [$self, \'load_route_template\']);
public function load_route_template($template)
{
if (!$this->matched_route instanceof Route || !$this->matched_route->has_template()) {
return $template;
}
// No file found yet
$located = false;
// Continue if template is empty
if ( empty( $this->matched_route->get_template() ) )
return;
// Check child theme first
if ( file_exists( trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
$located = trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
// Check parent theme next
} elseif ( file_exists( trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
$located = trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
// check plugin directory
} elseif ( file_exists( plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\' ) ) {
$located = plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\';
}
if ( ! empty( $located ) )
load_template( $located );
if (!empty($route_template))
$template = $located;
return $template;
}
我使用的代码基于
this tutorial, 路由工作得很好,当我点击某些路由时会加载模板,但索引除外。php总是遵循它。
SO网友:obiPlabon
template_include
是一个filter hook 所以你应该使用add_filter()
而不是add_action()
, 这打破了这里的语义。虽然这两个函数在内部做相同的事情。
试试下面的代码,我还没有测试过,但应该可以。简化并删除了一些代码。
add_filter(\'template_include\', [$self, \'load_route_template\']);
public function load_route_template($template)
{
if (!$this->matched_route instanceof Route || !$this->matched_route->has_template() || empty( $this->matched_route->get_template() ) ) {
return $template;
}
// No file found yet
$located = false;
// Check child theme first
if ( file_exists( trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
$located = trailingslashit( get_stylesheet_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
// Check parent theme next
} elseif ( file_exists( trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\' ) ) {
$located = trailingslashit( get_template_directory() ) . \'rcp/\' . $this->matched_route->get_template().\'.php\';
// check plugin directory
} elseif ( file_exists( plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\' ) ) {
$located = plugin_dir_path( dirname( __FILE__ ) ) . \'public/\' . $this->matched_route->get_template().\'.php\';
}
if ( $located ) {
$template = $located;
}
return $template;
}