所以我写了一个短码来生成一个循环(它显示了最近的帖子),短码很简单[loop]
. 下面是输出每个帖子内容的代码(这是导致我出现问题的位):
$output .= "<p class=\'entry-content\'>" . get_the_content() . "</p></div>";
因此,我写文章,短代码将它们显示在主页和我指定短代码的任何其他地方。我在相当多的网站上使用这个,从来没有遇到过任何问题。
在当前项目中,客户希望能够在主页上发布葡萄藤。我写了另一个将藤蔓嵌入帖子的快捷码:
function render_vine_embeds($atts) {
extract(shortcode_atts(array(
"id" => \'\',
"type" => \'simple\',
"dimension" => 600
), $atts));
$vine_id = $id;
$vine_type = $type;
$vine_dimension = $dimension;
return \'<iframe class="vine-embed" src="https://vine.co/v/\'. $vine_id .\'/embed/\'. $vine_type .\'" width="\'. $vine_dimension .\'" height="\'. $vine_dimension .\'" frameborder="0"></iframe> <script async src="//platform.vine.co/static/scripts/embed.js" charset="utf-8"></script>\';
} add_shortcode("vine", "render_vine_embeds");
因此,短代码如下所示:
[vine id="{{ id here }}"]
, 类型和维度属性是可选的。当我在某个特定的帖子上时,这些都很好,但当它出现在主页上,并且循环由短代码生成时,Vine短代码不起作用,原始短代码显示为内容。
我试过使用do_shortcode([vine])
而不是the_content()
, 这很有效,但id
部分短代码没有显示,因此Vine页面显示“未找到”页面,而不是Vine本身。
所以在所有这些之后,我的最终问题是如何在带有变量的短代码中使用短代码?
最合适的回答,由SO网友:chifliiiii 整理而成
您需要将do\\u短代码应用于内容本身。以下示例:
function test_func( $atts, $content ) {
extract( shortcode_atts( array(
\'foo\' => \'no foo\',
\'baz\' => \'default baz\'
), $atts ) );
return "<div class=\'test\'>".do_shortcode($content)."</div>\';
}
add_shortcode( \'test\', \'test_func\' );
所以换句话说,你需要关心打印帖子的短代码,而不是藤蔓代码。