是否可以 link 到 Timber 模板中的其他静态页面?
Is it possible to link to other static pages in a Timber template?
目前,要 link 到 "FAQ" 页面,我有以下内容:
Check out our <a href="{{ site.link }}/faq">FAQ</a> page.
但是,我希望能够 link 到我的 WordPress 主题中的其他内部页面,而无需在其后手动写入 URL 参数。类似于:
Check out our <a href="{{ site.link('faq') }}">FAQ</a> page.
这在 Timber 中是不可能的吗?我已经检查了文档,但没有看到任何参考,但我觉得我一定遗漏了一些东西。
您可以使用过滤器 timber_context
将页面添加到您的上下文中
add_filter('timber_context', 'add_to_context');
function add_to_context($context){
/* this is where you can add your own data to Timber's context object */
$extraLinks = [];
$extraLinks['faq'] = get_permalink($faq_ID);
$context['site']['extraLinks'] = $extraLinks;
return $context;
}
所以你可以调用你的 twig 文件
Check out our <a href="{{ site.extraLinks.faq }}">FAQ</a> page.
Wordpress有两个函数可以解决:get_page_by_path() and get_permalink()
get_page_by_path('page-slug');
get_permalink(page_id);
使用 Timber 你可以写这样的东西 calling a Timber function:
{{ function('get_permalink', function('get_page_by_path', 'page-slug')) }}
但是当然,您应该定义一个 wp 函数才不会发疯。您可以使用 functions.php 文件向 WordPress 添加功能,即使您应该定义一个 class 到 extends Timber(如果没有,复制并粘贴它)
class StarterSite extends Timber\Site {
public function __construct() {
add_filter( 'timber/twig', array( $this, 'add_to_twig' ) );
add_filter( 'timber/context', array( $this, 'add_to_context' ) );
$this->add_routes();
parent::__construct();
}
public function add_to_context( $context ) {
$context['menu'] = new Timber\Menu();
$context['site'] = $this;
return $context;
}
public function add_to_twig( $twig ) {
$twig->addFunction( new Timber\Twig_Function( 'get_permalink_by_slug', function($slug) {
return get_permalink( get_page_by_path($slug) );
} ) );
return $twig;
}
}
new StarterSite();
如您所见,名为 get_page_by_slug 的 I defined a Twig function 接收带有页面 slug 的字符串。现在,你可以把它写在你的模板上了:
{{ get_permalink_by_slug('page-slug') }}
尽情享受吧:)
目前,要 link 到 "FAQ" 页面,我有以下内容:
Check out our <a href="{{ site.link }}/faq">FAQ</a> page.
但是,我希望能够 link 到我的 WordPress 主题中的其他内部页面,而无需在其后手动写入 URL 参数。类似于:
Check out our <a href="{{ site.link('faq') }}">FAQ</a> page.
这在 Timber 中是不可能的吗?我已经检查了文档,但没有看到任何参考,但我觉得我一定遗漏了一些东西。
您可以使用过滤器 timber_context
将页面添加到您的上下文中add_filter('timber_context', 'add_to_context');
function add_to_context($context){
/* this is where you can add your own data to Timber's context object */
$extraLinks = [];
$extraLinks['faq'] = get_permalink($faq_ID);
$context['site']['extraLinks'] = $extraLinks;
return $context;
}
所以你可以调用你的 twig 文件
Check out our <a href="{{ site.extraLinks.faq }}">FAQ</a> page.
Wordpress有两个函数可以解决:get_page_by_path() and get_permalink()
get_page_by_path('page-slug');
get_permalink(page_id);
使用 Timber 你可以写这样的东西 calling a Timber function:
{{ function('get_permalink', function('get_page_by_path', 'page-slug')) }}
但是当然,您应该定义一个 wp 函数才不会发疯。您可以使用 functions.php 文件向 WordPress 添加功能,即使您应该定义一个 class 到 extends Timber(如果没有,复制并粘贴它)
class StarterSite extends Timber\Site {
public function __construct() {
add_filter( 'timber/twig', array( $this, 'add_to_twig' ) );
add_filter( 'timber/context', array( $this, 'add_to_context' ) );
$this->add_routes();
parent::__construct();
}
public function add_to_context( $context ) {
$context['menu'] = new Timber\Menu();
$context['site'] = $this;
return $context;
}
public function add_to_twig( $twig ) {
$twig->addFunction( new Timber\Twig_Function( 'get_permalink_by_slug', function($slug) {
return get_permalink( get_page_by_path($slug) );
} ) );
return $twig;
}
}
new StarterSite();
如您所见,名为 get_page_by_slug 的 I defined a Twig function 接收带有页面 slug 的字符串。现在,你可以把它写在你的模板上了:
{{ get_permalink_by_slug('page-slug') }}
尽情享受吧:)