外贸独立站的底层设计密码WordPress 成品站模板
当前位置:首页>WordPress资讯>WordPress 4.7 将带来新的主题开发相关函数和钩子

WordPress 4.7 将带来新的主题开发相关函数和钩子

刚刚看到WordPress官方消息(原文),WordPress 4.7 将带来新的主题开发相关函数和钩子,如果你是主题开发者,一起来了解一下吧。

注:以下函数和钩子可能会有进一步更改!

get_theme_file_uri()及相关函数

WordPress 3.0 引进了 get_template_part() 函数,可以用来加载主题的文件,它会先在子主题中找到该文件,如果子主题没有就在父主题查找,这样就可以允许通过子主题来覆盖父主题的某些文件。

WordPress 4.7 将引进一个新的 get_theme_file_uri() 函数,允许子主题获取主题文件路径,比如用于引用css或js脚本,例如:

wp_enqueue_script( 'my-script', get_theme_file_uri( 'js/my-script.js' ) );

上面的代码将先在子主题中引用 js/my-script.js 的网址,如果不存在就在父主题引用。这样一来,子主题就可以覆盖父主题引用的css和js脚本。当然,如果没有使用子主题,那该函数也一样可以在父主题中正常使用。

WordPress 4.7 也会带来另一个相关函数 get_theme_file_path(),它相当于 get_theme_file_uri() 的文件路径。该函数的一个可能用途是,当你想为这个css或js添加时间戳版本的时候(使用 filemtime()),就可以使用这个函数:

wp_enqueue_script(
    'my-script',
    get_theme_file_uri( 'js/my-script.js' ),
    array(),
    filemtime( get_theme_file_path( 'js/my-script.js' ) )
);

此外,还新增了 get_parent_theme_file_uri() 和 get_parent_theme_file_path() 函数,专用于引用父主题的文件网址和路径。为了保持一致性,这些函数可以用来分别替代你可能使用的 get_template_directory_uri()get_template_directory()

{$type}_template_hierarchy 过滤钩子

这些动态命名的钩子允许主题或插件通过特定的请求来过滤模板层级(template hierarchy)。虽然技术上可以使用 template_include 钩子来实现过滤模板层级,但是新的过滤钩子更加直接、简单、和长远,而且不需要在钩子的回调函数中重新实现整个层级逻辑。

可用的钩子名如下:

  • embed_template_hierarchy
  • 404_template_hierarchy
  • search_template_hierarchy
  • frontpage_template_hierarchy
  • home_template_hierarchy
  • taxonomy_template_hierarchy
  • attachment_template_hierarchy
  • single_template_hierarchy
  • page_template_hierarchy
  • singular_template_hierarchy
  • category_template_hierarchy
  • tag_template_hierarchy
  • author_template_hierarchy
  • date_template_hierarchy
  • archive_template_hierarchy
  • paged_template_hierarchy
  • index_template_hierarchy

下面整个例子就是通过新的钩子添加一个基于年份的模板文件到日期存档的最高层级:

add_filter( 'date_template_hierarchy', function( array $templates ) {
    $year = get_query_var( 'year' );
    array_unshift( $templates, "year-{$year}.php" );
    return $templates;
} );

下面整个稍微复杂一点的例子,添加一个基于分类项目Meta字段值的模板文件到分类归档层级中:

add_filter( 'category_template_hierarchy', function( array $templates ) {
    $format = get_term_meta( get_queried_object_id(), 'format', true );
    if ( $format ) {
        $new = "category-format-{$format}.php";
        $pos = array_search( 'category.php', $templates );
        array_splice( $templates, $pos, 0, $new );
    }
    return $templates;
} );

更多例子请看 #14310

这些钩子同样支持调试类插件来访问和显示每次请求的模板层级,以便让你了解 WordPress 在你主题中查找什么文件。最新版本的 Query Monitor 已经支持这个功能。

需要注意的是,WordPress 模板层级的一致性使得标准化主题结构成为可能,强烈建议不要使用这些钩子来移除候选层级模板文件,除非你知道自己在做什么!

支持非ASCII编码命名的模板文件

如果你给文章或项目使用非ASCII编码命名,例如2016-09-09_163426,名字的URL编码(URL-encoded)形式将可以在模板层级中使用。例如,WordPress 4.7 之前的文章查找的层级如下:

2016-09-09_163502

这不是很人性化,所以 WordPress 4.7 增加了一个新的、更高的优先级的模板,支持非编码形式命名:

2016-09-09_163449

这就可以让你很清楚地看到哪些文件是用于特定的非ASCII编码命名的文章。

大家都知道,中文是非ASCII编码,那这个改进是否意味着可以使用中文命名模板文件:single-post-世界你好.php?哈哈哈……

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
欢迎关注WordPress大学公众号 WPDAXUE
WordPress资讯

WordPress 4.6.1 发布,修复2个安全问题和15个BUG

2016-9-8 9:33:20

WordPress资讯

WordPress 4.7 新主题 Twenty Seventeen 来袭!

2016-9-10 8:20:05

4 条回复 A文章作者 M管理员
  1. fuan

    wordpress这两年更新挺勤的

    • 倡萌

      的确,保持更新势头挺好的,不像国内很多程序几年都不更新,安全性都得不到保证

    • 动感单车网

      我个人觉得,有利有弊,弊在老是在头部自动多出自己用不上的功能!

  2. 动感单车网

    我的已经升级到了4.6.1版本,今后可能会蛮长一段时间不会再升级。因为,每次升级都会在头部多出一些东西,而这些又是自己用不上的,还得想办法去掉它,真是麻烦!

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索