如何将 php 模板转换为 Timber (Wordpress)

How to convert php template to Timber (Wordpress)

我可以创建一个全新的 Timber 模板,但我需要覆盖一个插件模板 (MEC Events) - 插件支持对此提供了帮助,但它在 php 中有效并引入我的基本树枝模板中的页眉和页脚,但不包括它应该包含的 post.thumbnailpost.title

在任何情况下,我都希望将整个站点保留在 Timber/Twig 中,但不知道从哪里开始将其转换为 Timber 模板。这是 php 模板,非常感谢任何帮助:

<?php
/**
 * The Template for displaying all single events
 */

get_header();

$single = new MEC_skin_single();
$single_event_main = $single->get_event_mec(get_the_ID());
$single_event_obj = $single_event_main[0];

// Date Widget
$single->display_date_widget($single_event_obj);
// Time Widget
$single->display_time_widget($single_event_obj);
// Location Widget
$single->display_location_widget($single_event_obj); // Show Location
// Label Widget
$single->display_label_widget($single_event_obj);
// Export Widget
$single->display_export_widget($single_event_obj);
//Social
$single->display_social_widget($single_event_obj);

get_footer();

我不熟悉 MEC 事件日历,但从您的代码片段来看,我认为您可以让它发挥作用,至少在一定程度上。

你有这三行,那种准备应该在模板中显示的数据。

$single = new MEC_skin_single();
$single_event_main = $single->get_event_mec(get_the_ID());
$single_event_obj = $single_event_main[0];

使用 Timber 和 Twig,您需要在 PHP 中准备数据,然后将其传递给您的 Twig 模板。这是我的做法。

<?php

$context = Timber::get_context();

$single            = new MEC_skin_single();
$single_event_main = $single->get_event_mec( get_the_ID() );

$context = array_merge( $context, [
    'single'           => $single,
    'single_event_obj' => $single_event_main[0],
] );

Timber::render( 'single-event.twig', $context );

单-event.twig

{% extends 'base.twig' %}

{% block content %}

    {# Date Widget #}
    {{ single.display_date_widget(single_event_obj) }}

    {# Time Widget #}
    {{ single.display_time_widget(single_event_obj) }}

    {# Location Widget #}
    {{ single.display_location_widget(single_event_obj) }}

    {# Label Widget #}
    {{ single.display_label_widget(single_event_obj) }}

    {# Export Widget #}  
    {{ single.display_export_widget(single_event_obj) }}

    {# Social #}
    {{ single.display_social_widget(single_event_obj) }}

{% endblock }

在 Timber 中,您通常有一个扩展的基本模板。在该基本模板中,您可以定义要放置内容的块。这就是 {% extend %}{% block %} 标签的用途。有了这个,你可以摆脱 get_header()get_footer().

因为$single是一个有display_*_widget()方法的对象,我们可以通过点符号访问那个函数。这些方法需要一个 $single_event_obj 作为参数,所以我们确保这个变量也传递给模板数据。

如果您现在需要访问 post.thumbnailpost.title,您还可以在 PHP 模板中准备一个 post 变量:

<?php

$context = Timber::get_context();

$single            = new MEC_skin_single();
$single_event_main = $single->get_event_mec( get_the_ID() );

$context = array_merge( $context, [
    'post'             => Timber::get_post(),
    'single'           => $single,
    'single_event_obj' => $single_event_main[0],
] );

Timber::render( 'single-event.twig', $context );