我最近接管了使用Timber(我不熟悉)的Wordpress网站的开发。我试图使用新的插件和附带的短代码,这当然不起作用。
我已经研究了几个小时,但似乎并不是一个简单的答案。为了使用这样的简单短代码:
[sp_faq category =" 7"]
我真的需要在functions.php中创建自定义短代码函数,为它添加某种模板文件等吗?这似乎与Twig的“简单事物”相违背。
除非我遗漏了一些明显的东西,否则这方面的文件不是很好。
答案 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]') %}
在模板中的任何位置处理简码。