使用Timber插件时未呈现wordpress简单短代码

时间:2017-11-22 16:56:01

标签: wordpress twig timber

我最近接管了使用Timber(我不熟悉)的Wordpress网站的开发。我试图使用新的插件和附带的短代码,这当然不起作用。

我已经研究了几个小时,但似乎并不是一个简单的答案。为了使用这样的简单短代码:

[sp_faq category =" 7"]

我真的需要在functions.php中创建自定义短代码函数,为它添加某种模板文件等吗?这似乎与Twig的“简单事物”相违背。

除非我遗漏了一些明显的东西,否则这方面的文件不是很好。

4 个答案:

答案 0 :(得分:1)

对于OP来说似乎已经太晚了,但对于遇到此问题的其他人来说:正确的解决方案结合在Luckyfella的答案和评论中。如果他尝试过Luckyfella的最终建议,我认为OP会有效。

您需要将{{post.post_content|wpautop|shortcodes}} *放入Twig文件中。这将呈现默认情况下放入主WYSIWYG编辑器的自动段落和短代码。

* post只是Timber中TimberPost的传统默认名称,您还需要检查PHP模板文件以查看Timber上下文和Timber post变量的调用内容。对于OP,似乎是page,而不是帖子。

答案 1 :(得分:1)

您可以尝试执行此操作(例如使用重力形式的简码):

{% filter shortcodes %}
  [gravityforms id="1"]
{% endfilter %}

答案 2 :(得分:0)

只是以为我会在这里鸣钟。

post.post_content包含数据库中包含的 raw 数据(在未应用任何过滤器之前),而post.content中包含数据之后的已经应用了过滤器,因此不需要在其上运行过滤器|shortcodes

出于某种原因,我使用post.post_content并发现了这个问题,是因为我试图弄清为什么我的短代码无法正常工作,因此导致我进行了更多研究。

现在,阅读此问题的答案,我真的不满意,因为我也一直使用|e('wp_kses_post')对输出的数据进行消毒处理,但是如果我使用了类似的方法:

{{ post.content|wpautop|e('wp_kses_post') }}

...然后,很明显,经过处理的短代码可以得到正确的过滤数据,但同时也可以使用e('wp_kses_post')过滤器去除所有不允许的数据。

当然,您可以在此过滤器中添加 allowable 标签,但是显然这不太现实,因为您不确定确切的代码将输出什么输出,也不希望继续更新它。

因此,我们遇到了一个问题...我们想允许解析短代码,但同时还要清理内容-怎么办!?

解决方案如下:

{{ post.post_content|wpautop|e('wp_kses_post')|apply_filters('the_content') }}

这里我们使用post.post_content,所以我们在过滤之前先找到内容 ,然后在wpautop过滤之后先然后 {1}};这将使数据卫生,但是重要的是它将保留短代码,因此可以仍然进行过滤!

最后,我们使用e('wp_kses_post')过滤器对内容应用过滤器,然后这将处理应用于apply_filters的所有过滤器,包括解析短代码。

尽管如果您已经在使用universal escaping,则必须考虑以上内容如何适用于您的情况。

答案 3 :(得分:0)

读取后就像您想在post.content之外使用简码。

您可以使用{% function('do_shortcode', '[shortcode here]') %}在模板中的任何位置处理简码。