在 WordPress 主题中,理论上可以通过自定义文章类型,来解决绝大部分需求。因此,也会出现 “文章” 的属性非常复杂的情况。这时候 WordPress 原本的模板树往往显得力不从心。
如何为 WordPress 主题添加新的模板文件呢?
WordPress钩子 template_include ,这个过滤器钩子在WordPress包含预定模板文件之前立即执行。这可以用来覆盖WordPress的默认模板行为。
$template = apply_filters( 'template_include', $template );
触发时机,在包含当前模板之前过滤当前模板的路径。
举例一、
add_filter( 'template_include', 'portfolio_page_template', 99 );
function portfolio_page_template( $template ) {
if ( is_page( 'portfolio' ) ) {
$new_template = locate_template( array( 'portfolio-page-template.php' ) );
if ( '' != $new_template ) {
return $new_template ;
}
}
return $template;
}
这个例子中为页面:portfolio 指定了新的模板文件。这属于修改默认模板行为。但是这个例子,貌似直接建立模板文件:page-portfolio.php ,也可以解决相同的问题。
举例二、
/**
* multiple custom routing with one page
*/
add_filter( 'template_include', 'wpdocs_include_template_files_on_page' );
function wpdocs_include_template_files_on_page( $template ) {
$action = isset( $_GET['action'] ) ? $_GET['action'] : 'list';
switch ( $action ) {
case 'add-list' :
$template = __DIR__ . 'views/address-new.php';
break;
case 'edit-list' :
$template = __DIR__ . 'views/address-edit.php';
break;
case 'view-list' :
$template = __DIR__ . 'views/address-view.php';
break;
default :
$template = __DIR__ . 'views/address-list.php';
break;
}
return $template;
}
这个例子中,根据 $action 参数,包含不同的模板。但这个例子中,这些功能也完全可以在一个页面中通过判断 $action ,继而 include 不同的模板来实现。貌似仍未体现出 include_template 的特殊之处。
举例三、
例子三,可以参见:《WordPress 中使用 add_rewrite_rule 添加自定义重写规则完整示例》。
这个例子中,是添加了一个全新的路由及全新的模板文件。这是其他 WordPress 功能难以完成的。
-
WordPress 用户评论审核通过,发个通知给用户如何通知用户评论审核通过了
-
WordPress钩子:after_setup_theme 简介after_setup_theme 是为主题添加特性的好地方
-
WordPress钩子:switch_theme 与 after_switch_theme 简介只在启用主题时,执行一次的钩子
-
WordPress钩子:default_content 给文章编辑器设置默认内容如何给 WordPress 编辑器设置默认内容
-
WordPress钩子:template_redirect 模板重定向又一种修改 WordPress 默认模板行为的方法
-
WordPress钩子:wp_head 向头部添加代码WordPress中的头部信息
暂无评论,抢个沙发...