1

我是第一次使用 Timber,我发现很难将我的纯 PHP 思维转换为这种模板模型。

我目前感到困惑的是使用作为输入字段的日期,而不是发布日期。

所以我有一个来自 ACF 的中继器字段。它具有三个子字段:release_datedocument_filedocument_title。我的发布日期格式是YYYY-MM-DD.

您可能已经猜到了,此转发器字段作为 PDF 列表输出。

到目前为止一切顺利,但我想要一些高级功能 - 即默认情况下按 release_date 显示 PDF。我还希望能够按年份过滤,即 - 如果您单击“2015”,它只会显示该年的文件。

我确切地知道我将如何在直接的 WordPress 中做到这一点,但我很困惑在 Timber 上制作它。我一直在尝试使用自定义过滤器来做到这一点,但我觉得我真正想要的是一个自定义类?

另外,我安装 Timber 的时候没有自带启动主题,所以我搜索了一下,从 GitHub 下载了一个。我感觉这是一个旧版本,因为文件结构和语法似乎与文档不匹配。

从这里下载:https ://github.com/timber/starter-theme

但例如在启动主题functions.php中的这段代码:

function add_to_twig( $twig ) {
    /* this is where you can add your own functions to twig */
    $twig->addExtension( new Twig_Extension_StringLoader() );
    $twig->addFilter('split_date', new Twig_SimpleFilter('split_date', array($this, 'split_date')));
    return $twig;
}

与“添加到 Twig”下的https://github.com/timber/timber/wiki/Extending-Timber中的语法不太匹配。

4

1 回答 1

2

这里有一些辅助函数可以让我轻松扩展木材。

function add_context_var( $key, $var ) {
    add_filter( 'timber_context', function ( $context ) use ( $key, $var ) {
        $context[ $key ] = $var;

        return $context;
    } );
}

function add_context_func( $key, $callback ) {
    add_filter( 'timber/twig', function ( $twig ) use ( $key, $callback ) {
        $twig->addFunction( new \Twig_SimpleFunction( $key, $callback ) );

        return $twig;
    } );
}

function add_to_context( $key, $val ) {
    if ( is_callable( $val ) ) {
        add_context_func( $key, $val );
    } else {
        add_context_var( $key, $val );
    }
}

function add_to_context_filter( $key, $callback ) {
    add_filter( 'get_twig', function ( $twig ) use ( $key, $callback ) {
        $twig->addExtension( new Twig_Extension_StringLoader() );
        $twig->addFilter( new Twig_SimpleFilter( $key, $callback ) );

        return $twig;
    } );
}

//php file
add_to_context("blue", "this key is blue")
add_to_context("red", function($extra = ""){
  return "this key is red and it has $extra";
})
add_to_context_filter( "relative_link", function ( $content ) {
    return str_replace( "http://", "//", $content );;
} );

//twig file
color: {{ blue }}
color: {{ red("a function parameter") }}
github: {{ "http://github.com/"|relative_link }}

//output html
color: this key is blue
color: this key is red and it has function parameter
github: //github.com/
于 2017-05-14T07:13:42.280 回答