我已经消防了一段时间,而且我正在努力获取这个短代码,以便在调用时使这个Twig变为部分。有人有什么建议吗?
谢谢!
这是我到目前为止所拥有的:
<?php namespace loc\wp\lib;
use \Timber as Timber;
use \Twig_SimpleFunction as Twig_SimpleFunction;
class LOCShortcodes {
public function addSlider() {
add_shortcode('feature-slider', 'feature_slider');
function feature_slider() {
return Timber::render('template-feature-slider.twig');
}
}
}
答案 0 :(得分:1)
当您在类上下文中使用钩子和过滤器(或您的情况下的短代码)时,您需要稍微有点不同地定义回调。
https://codex.wordpress.org/Function_Reference/add_shortcode中的最后一个示例向您展示了如何在类中使用短代码:
<?php
class MyPlugin {
public static function baztag_func( $atts, $content = "" ) {
return "content = $content";
}
}
add_shortcode( 'baztag', array( 'MyPlugin', 'baztag_func' ) );
如您所见,短代码是在课堂外添加的。如果要在类中添加它,则不必显式使用类的名称,但可以使用$this
:
<?php
class MyPlugin {
public function __construct() {
add_shortcode( 'baztag', array( $this, 'baztag_func' ) );
}
public static function baztag_func( $atts, $content = "" ) {
return "content = $content";
}
}
在你的情况下,你可以这样做:
<?php
class LOCShortcodes {
public function __construct() {
add_shortcode( 'feature-slider', array( $this, 'feature_slider' ) );
}
public function feature_slider() {
return Timber::compile( 'template-feature-slider.twig' );
}
}
不要忘记使用Timber::compile()
而不是Timber::render()
,因为render()
函数正在回显输出,而对于短代码,应该返回输出。 Notes section in the Codex:
请注意,短代码调用的函数永远不会产生任何类型的输出。短代码函数应返回用于替换短代码的文本。直接生成输出将导致意外结果。 [...]
另请务必阅读有关Shortcodes in Timber。
的Wiki部分