在带有动态变量的短码中使用短码

时间:2013-12-15 作者:Tom Oakley

所以我写了一个短码来生成一个循环(它显示了最近的帖子),短码很简单[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本身。

所以在所有这些之后,我的最终问题是如何在带有变量的短代码中使用短代码?

1 个回复
最合适的回答,由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\' );
所以换句话说,你需要关心打印帖子的短代码,而不是藤蔓代码。

结束

相关推荐

Redirect loop in /wp-admin/

今天,我管理的一个网站管理员无法访问。我刚刚在服务器上更新了apache,以启用mod\\u deflate,并将PHP从5.3升级到5.4。因为每次我尝试访问/wp admin/I时都会收到重定向循环错误。我尝试了所有常见的嫌疑犯,即:清除了Cookie和缓存,尝试了不同的浏览器,禁用了主题,删除了禁用的Cookie。htaccess检查了wp\\U选项中的site\\u url等,但运气不佳。我可以访问wp登录。php很好,但不是/wp管理员/任何帮助都将不胜感激,因为我完全被难住了。