我一直试图通过增加短码功能来获取木材背景,但它似乎没有用。
我的代码是 add_action(' init',数组($ this,' create_shortcodes'));
public function create_shortcodes() {
add_shortcode( 'social_media', array($this, 'social_shortcode') );
}
public function social_shortcode($atts) {
$params = shortcode_atts(array(
'id' => 0
), $atts);
$data = Helpers::create_social_media( $atts['id'], false, true );
add_filter( 'timber_context', array($this, 'add_to_context_social_media'), 11 );
return \Timber\Timber::compile('social-media.twig', array('data' => $data['content'] ));
}
public function add_to_context_social_media($context) {
echo '<pre style="margin:200px">';
print_r($context);
echo '</pre>';
return $context;
}
如果我在create_shortcodes函数中添加过滤器,它可以工作,但它不在add_shortcode函数中,它也在create_shortcodes函数中。
任何帮助将不胜感激。 感谢
答案 0 :(得分:0)
渲染返回的输出而不是在短代码中渲染它会更好吗?
$returned_shortcode = do_shortcode('[your_shortcode]');
return \Timber\Timber::compile('social-media.twig', array('data' => $returned_shortcode ));
答案 1 :(得分:0)
使用此行
add_filter( 'timber_context', array($this, 'add_to_context_social_media'), 11 );
然后,您需要调用Timber::get_context()
才能应用过滤器。但是,对Timber::get_context()
的调用会被缓存。这意味着,如果您想使用timber_context
过滤器,则必须在第一次调用Timber::get_context()
之前添加它。如果您想在短代码中使用它,您可能已经在显示帖子内容的单个或归档PHP模板中调用了Timber::get_context()
。
我想您可以为您的 social-media.twig 模板建立数据上下文,如下所示:
public function social_shortcode($atts) {
$params = shortcode_atts(array(
'id' => 0
), $atts);
// Get cached context.
$context = Timber::get_context();
// Add to context.
$context['data'] = Helpers::create_social_media(
$atts['id'],
false,
true
);
return \Timber\Timber::compile( 'social-media.twig', $context );
}
除了自定义data
,您还将在Twig文件中使用全局上下文。