性价比最高的香港ASP、PHP主机提供商
做网站,就上凡科建站

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

Loading
0
Comodo SLL证书促销 - 免费ssl证书申请_ssl证书购买_ev ssl证书_https证书购买 - GDCA_数安时代

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

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

get_theme_file_uri()及相关函数

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

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

1
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()),就可以使用这个函数:

1
2
3
4
5
6
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

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

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

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

1
2
3
4
5
6
7
8
9
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?哈哈哈……

支付宝扫码打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

MetInfo | 最适合企业网站建设的cms系统

关于 倡萌

一个疯狂的 WordPress 爱好者,喜欢折腾 WordPress 主题,分享 WordPress 资源。如果你也喜欢 WordPress,欢迎和我一起交流!

精彩推荐

WordPress 3.9 正式版“Smith”发布

WordPress 3.9 正式版“Smith”发布

WordPress 4.6 正式版发布

WordPress 4.6 正式版发布

4 条评论

  1. wordpress这两年更新挺勤的

  2. 动感单车网

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

发表评论