frozzare / 处理器
WordPress的Twig模板
Requires
- php: >=5.4.7
- asm89/twig-cache-extension: ~1.0
- composer/installers: ~1.0
- frozzare/tank: ~1.1.0
- twig/extensions: ~1.0
- twig/twig: ~1.0
- umpirsky/twig-gettext-extractor: ~1.0
Requires (Dev)
- frozzare/wp-test-suite: ~1.0
- wp-coding-standards/wpcs: dev-develop
README
WordPress的Twig模板
Digster是一个WordPress插件,允许您使用少量Twig过滤器、函数和全局变量渲染Twig视图。
安装
composer require frozzare/digster
示例
page.php的示例
/** * Render page view. */ echo view( 'page' );
page.twig的示例
{% include "partials/header.twig" %} <div id="primary" class="content-area"> <main id="main" class="site-main" role="main"> <article class="post-2 page type-page status-publish hentry"> <header class="entry-header"> <h1 class="entry-title">{{ post.post_title }}</h1> </header> <div class="entry-content"> {{ post.post_content | wpautop | raw }} </div> </article> </main> </div> {% include "partials/footer.twig" %}
配置
Digster有几个WordPress过滤器,其中一个是配置过滤器。如果WP_ENV
等于development
,则默认开启调试。
add_filter( 'digster/config', function ( $config ) { return $config; } );
位置
一个包含视图位置的数组。默认情况下,已注册get_templates_directory() . '/views'
。
add_filter( 'digster/config', function ( $config ) { $config['locations'] = 'path/to/locations'; return $config; } );
Twig环境选项
auto_reload
示例
add_filter( 'digster/config', function ( $config ) { $config['auto_reload'] = true; return $config; } );
API函数
所有带有digster_
前缀的函数也可以作为\Frozzare\Digster\Digster
类的静态方法调用。只需将digster_
替换为Digster::
,确保您的代码中包含use Frozzare\Digster\Digster
获取视图
将视图获取到字符串中。
$view = digster_fetch( 'page' [, $data = [] ] );
获取视图实例
digster中的每个视图都是视图类的实例,可以访问。
$view = digster_view( 'page', [, $data = [] ] ); // or (only if `view` function don't exists.) $view = view( 'page', [, $data = [] ] ); echo $view;
嵌套视图
digster_view
或view
将返回视图实例,因此您可以使用nest
方法。
echo view( 'user.profile' ) ->nest( 'picture', 'user.profile.picture', [ 'url' => 'http://site.com/user/1/profile.png' ] );
{# views/user/profile.twig #}
{{ picture }}
{# views/user/profile/picture.twig #} <img src="{{ url }}" alt="Profile picture" />
您也可以使用digster_render
和digster_fetch
执行相同的操作。
digster_render( 'user.profile', [ 'picture' => digster_fetch( 'user.profile.picture', [ 'url' => 'http://site.com/user/1/profile.png' ] ) ] );
注册作曲家
使用Digster,您可以注册通配符模板或指定模板的作曲家。
此示例是为post
对象,但Digster已经加载了此全局变量。
// '*', 'page' or 'page.twig' digster_composer( 'page', function ( $vars ) { $vars['post'] = is_numeric( $vars['post'] ) ? get_page( $vars['post'] ) : $vars['post']; return $vars; }); // Only need to get the post ID digster_render( 'page', [ 'post' => get_the_ID() ] );
您还可以创建一个可以添加到digster_composer
的作曲家类。作曲家类上唯一必需的方法是接受视图参数的compose
方法。
class Profile_Composer { public function compose( $view ) { $view->with( 'job', 'developer' ); } } digster_composer( 'user.profile', 'Profile_Composer' );
注册自定义过滤器
自1.7.1
以来
add_filter( 'digster/filters', function ( $filters ) { return array_merge( $filters, [ 'hello' => function ( $text ) { return 'hello'; } ] ) } );
注册自定义函数
自1.7.1
以来
add_filter( 'digster/functions', function ( $functions ) { return array_merge( $functions, [ 'uniqid' => 'uniqid' ] ) } );
注册自定义全局变量
自1.7.1
以来
add_filter( 'digster/globals', function ( $globals ) { return array_merge( $globals, [ 'num' => 1 ] ) } );
注册扩展
使用Digster注册Twig扩展类。
digster_register_extensions( new My_First_Twig_Extension() ); // or digster_register_extensions( [ new My_First_Twig_Extension(), new My_Second_Twig_Extension() ] );
渲染视图
渲染视图
digster_render( 'page' [, $data = []] );
在视图之间共享数据
您可以使用带有*
(通配符)的digster_composer
或使用digster_share
在视图之间共享数据。所有共享数据都可以被覆盖。
digster_share( 'site_name', 'Example' );
Twig过滤器
apply_filters
将过滤器应用于Twig输出。
{{ '@frozzare' | apply_filters('twitter_link') }}
摘录
获取文章摘要
{{ post.post_content | excerpt }}
短代码
在文本上运行WordPress短代码
{{ post.post_content | shortcodes | raw }}
wpautop
将p标签附加到文本
{{ post.post_content | wpautop | raw }}
Twig函数
自1.7.1
以来,您可以使用与WordPress中应使用的相同参数调用esc_html__
、esc_html_e
、esc_attr__
、esc_attr_e
、esc_js
、esc_textarea
、esc_url
和esc_url_raw
。
调用__
与WordPress的__相同。
Digster完全支持Twig i18n,有关更多信息。
{{ __( 'Hello World!', 'your_textdomain' ) }}
调用_n
与WordPress的_n函数相同的参数。
Digster完全支持Twig i18n,有关更多信息。
{{ _n('%s star', '%s stars', rating, 'your_textdomain') | format(rating) }}
调用操作
您可以向do action
发送更多参数
{% do action('my_action') %}
调用apply_filters
与apply_filters
具有相同的参数
{{ apply_filters() }}
调用body_class
<body {{ body_class() }}>
调用language_attributes
<html {{ language_attributes() }}>
调用随机函数
您可以向fn
发送更多参数
<body {{ fn('my_function', 'a', 'b') }}>
调用wp_footer
{{ wp_footer() }}
调用wp_head
{{ wp_head() }}
调用wp_title
与wp_title
具有相同的参数
{{ wp_title() }}
Twig全局变量
post
当get_the_ID()
返回id时,post
是全局的。
<h1>{{ post.post_title }}</h1>
Twig国际化
Digster完全支持Twig i18n 扩展。您不需要做任何事情来启用它,只需使用它!它将自动加载主题文本域。别忘了将其添加到您的style.css
中。
使用Poedit?您应该看看Twig Gettext Extractor!Digster会安装Twig Gettext Extractor,因此您不需要这样做!
{% trans "Hello World!" %} {% trans string_var %} {% trans %} Hello World! {% endtrans %}
缓存
查看Twig缓存扩展(Digster安装了包,因此您无需安装)。Digster内置了一个使用WordPress对象缓存的缓存提供程序。
use Frozzare\Digster\Cache\WordPress_Cache_Adapter; use Asm89\Twig\CacheExtension\CacheStrategy\LifetimeCacheStrategy; use Asm89\Twig\CacheExtension\Extension as CacheExtension; $cache_provider = new WordPress_Cache_Adapter(); $cache_strategy = new LifetimeCacheStrategy($cache_provider); $cache_extension = new CacheExtension($cache_strategy); digster_register_extensions( $cache_extension );
编码风格
您可以通过安装PHP CodeSniffer并在您的项目目录中运行以下命令来检查您的贡献是否通过风格指南
vendor/bin/phpcs -s --extensions=php --standard=phpcs.xml src/
许可证
MIT © Fredrik Forsmo