在WordPress中调用短代码时渲染.twig文件?

时间:2016-05-24 19:18:50

标签: php wordpress twig timber

我已经消防了一段时间,而且我正在努力获取这个短代码,以便在调用时使这个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');
    }
  }
}

1 个答案:

答案 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部分