Я боролся с этим некоторое время, и я изо всех сил пытаюсь получить этот шорткод, чтобы сделать этот 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');
}
}
}
Когда вы работаете с хуками и фильтрами (или шорткодами в вашем случае) в контексте класса, вам нужно определить обратный вызов немного по-другому.
Последний пример в 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()
функция повторяет вывод, в то время как для коротких кодов вывод должен быть возвращен. Это также упоминается в Заметки раздел в Кодексе:
Обратите внимание, что функция, вызываемая шорткодом, никогда не должна выдавать какой-либо вывод. Функции шорткода должны возвращать текст, который должен использоваться для замены шорткода. Непосредственное получение результатов приведет к неожиданным результатам. […]
Также обязательно прочитайте раздел вики о Шорткоды в тимберсе.
Других решений пока нет …