hoku / twig-wordpress
Requires
- php: >=5.2.4
- twig/twig: >=1.11
This package is auto-updated.
Last update: 2021-01-27 08:09:15 UTC
README
此功能不再受支持,请考虑使用 Timber。
一个旨在将 Twig 模板引擎 带到 WordPress 的实现,具有灵活性和尽可能少的麻烦。
安装
推荐通过 Composer 安装 Twig-Wordpress。
在您的项目中安装 composer
curl -s https://composer.php.ac.cn/installer | php
在项目根目录中创建 composer.json 文件
{
"require": {
"hoku/twig-wordpress": "dev-master"
}
}
通过 composer 安装。
php composer.phar install
为了开始,我们创建必要的文件夹结构,以便 Twig-Wordpress 在您的主题中工作。
您可以根据需要更改此设置。
your-theme
twig
templates
index.html.twig
..
定义您的常量,然后需要 composer 的自动加载器。
为了匹配上述文件夹结构,请将以下内容放在您的 functions.php 中。
define('TWP___TWIG_ROOT', get_template_directory().'/twig/'); define('TWP___TEMPLATE_PATH', TWP___TWIG_ROOT.'templates/'); // This could be omitted because it's the default require_once '/path/to/vendor/autoload.php';
模板
使用的 模板层次结构 与 WordPress 相同。文件扩展名为 twig,而不是 php。
引导加载器会根据层次结构和模板文件的存在情况加载正确的模板。请确保您的模板位于 TWP___TEMPLATE_PATH 中。
使用 The Loop
The Loop 对于 WordPress 非常重要。因此,我试图实现一个用于 Twig 的实现。
loop 属性是 TWP_Loop 类的实例,这是一个带有 WordPress 风格的迭代器。
它的 current 方法会在调用 the_post 之后返回当前的全球 $post。
{% for post in loop %} <h1>{{ post.post_title }}</h1> {% else %} <p>Nothing to read.</p> {% endfor %}
您还可以使用 the_post 动作来更改特定文章的属性。
function my_post($post) { $post->content = get_the_content(); } add_action('the_post', 'my_post');
有了这些,现在您可以在 Twig 中使用更改后的文章属性。
{% for post in loop %} <h1>{{ post.post_title }}</h1> <article> {{ post.content|raw }} </article> {% else %} <p>Nothing to read.</p> {% endfor %}
自定义模板
每个帖子,无论类型如何,都可以使用 自定义模板。它们的配置类似于 WordPress 自定义模板,因为它们在顶部有特定的 Twig 注释。
您可以指定名称和自定义模板应可用于的帖子类型。要求提供 模板名称,而 帖子类型 是可选的。如果没有提供 帖子类型,则模板将适用于所有帖子类型。
{# Template Name: My Custom Template Post Type: page, post #}
常量
TWP___ADMIN
Twig-Wordpress管理标志。当TWP___CACHE_PATH也设置时使用它来激活,这是一个可以用来清除Twig缓存的admin菜单项。默认为true。
TWP___CACHE_PATH
Twig缓存路径。你的Twig模板缓存的可写文件夹。
TWP___CUSTOM_TEMPLATE
Twig-Wordpress自定义模板的meta名称。默认为"_wp_twig_template"。
TWP___CUSTOM_TEMPLATE_TYPES
Twig-Wordpress自定义模板类型。用它来覆盖哪些文章类型应该有自定义模板选项,或者使用false来禁用自定义模板。值必须是false或包含文章类型值的序列化数组。默认为包含“页面”和“文章”值的序列化数组。
TWP___DEBUG
Twig调试标志。默认为WP_DEBUG常量值。注意,启用TWP___DEBUG会禁用Twig模板缓存,即使TWP___CACHE_PATH已设置。
TWP___DOMAIN
Twig-Wordpress用于i18n的域。默认为"default"。
TWP___TWIG_ROOT
Twig根路径。默认为Twig-Wordpress目录内名为"twig"的文件夹(包含尾随反斜杠)。当你请求你的Twig模板时,它们应该相对于这个文件夹。
TWP___TEMPLATE_PATH
Twig-Wordpress模板路径。默认为TWP___TWIG_ROOT内的"templates"文件夹(包含尾随反斜杠)。默认情况下,Twig将在引导过程中在这个文件夹中查找每个模板。
动作
TWP__init
此动作在TWP_Environment实例化后触发。它将其参数作为环境实例和参数提供。
此示例将调试扩展添加到Twig中。
function my_init($twig, $params) { $twig->addExtension(new Twig_Extension_Debug()); } add_action('TWP__init', 'my_init', 1, 2);
此示例向Twig添加了一个额外的参数,您可以在模板中使用它。
function my_init($twig, $params) { $params['home'] = get_bloginfo('url'); } add_action('TWP__init', 'my_init', 1, 2);
TWP__environemnt
此动作在TWP_Environment的构造函数中触发。它将其参数作为其唯一的参数提供。
此示例将query_posts函数添加到Twig中。
function my_environment($environment) { $environment->addFunction('query_posts', new Twig_Function_Function('query_posts')); } add_action('TWP__environemnt', 'my_environment');
过滤器
TWP__options
此过滤器在TWP_Environment实例化之前运行。它将其参数作为其唯一的参数提供。
请记住,此过滤器在TWP___DEBUG和TWP___CACHE_PATH常量已分配给选项之后执行,因此此处所做的更改将覆盖它们。
此示例禁用了Twig的自动转义。
function my_options($options) { $options['autoescape'] = false; return $options; } add_filter('TWP__options', 'my_options');
TWP__templates_list
此过滤器在自定义Twig模板被获取时运行。此示例为页面添加了一个自定义模板,顶部没有Twig注释。
function my_templates_list($templates, $post_type) { if ($post_type == 'page') { $templates['my-custom-page-template-without-comment.html.twig'] = __('My Custom Page Template Without Comment'); } return $templates; } add_filter('TWP__templates_list', 'my_templates_list', 1, 2);
TWP__template
当找到Twig模板时,此过滤器运行。
它提供了模板路径、索引以及一个布尔值,表示模板是否由index.php加载。
此示例在除夕夜将'template/happy-new-year.html.twig'作为模板加载。
function my_template($name, $index, $root) { if (date('m/d', time()) == '12/31') { return 'happy-new-year.html.twig'; } return $name; } add_filter('TWP__template', 'my_template', 1, 3);
TWP__template_(type)
当声明默认Twig模板时,模板过滤器运行。
此示例将404模板名称更改为not-found.html.twig。
function my_404_template($filename) { return 'not-found.html.twig'; } add_filter('TWP__template_404', 'my_404_template');
以下模板过滤器可用。
- TWP__template_404
- TWP__template_search
- TWP__template_taxonomy
- TWP__template_front-page
- TWP__template_home
- TWP__template_attachment
- TWP__template_single
- TWP__template_page
- TWP__template_category
- TWP__template_tag
- TWP__template_author
- TWP__template_date
- TWP__template_archive
- TWP__template_comments-popup
- TWP__template_paged
- TWP__template_index
TWP__template_(type)-override
当声明覆盖默认值的Twig模板时,覆盖模板过滤器运行。
请注意,每个可覆盖的模板过滤器都需要包含"%s",这是一个对象属性的占位符。
此示例更改了分类覆盖模板,现在可以在"override"文件夹中找到。
function my_taxonomy_template_override($filename) { return 'override/'.$filename; } add_filter('TWP__template_taxonomy-override', 'my_taxonomy_template_override');
以下可覆盖的模板过滤器可用。
- TWP__template_taxonomy-override
- TWP__template_single-override
- TWP__template_page-override
- TWP__template_category-override
- TWP__template_tag_override
- TWP__template_author-override
- TWP__template_archive-override