如何解析短码中的短码?

时间:2020-02-28 作者:ScottM

我创建了一个快速函数和快捷代码,允许我包含登录的仅限用户的内容:

function content_for_logged_in($atts,$content){
    $logged_in_content = "";
    if(is_user_logged_in()){
        $logged_in_content = $content;
    }
    return $logged_in_content;  
}
add_shortcode(\'logged-in-content\',\'content_for_logged_in\');
但它不会解析内容中的短代码,例如:

[logged-in-content]
<p>Some test content...</p>
[wpforms id="752"]
[/logged-in-content]
。。。在这种情况下,将显示wpforms快捷码,而不是表单。

有没有办法改变我的函数,以便解析内容中的短代码?

谢谢Scott

2 个回复
最合适的回答,由SO网友:HU ist Sebastian 整理而成

您要查找的函数名为do_shortcode (还有一个功能apply_shortcode 在Wordpress 5.4中,也是这样)。Codex Page

对于您的示例,这将起作用:

function content_for_logged_in($atts,$content){
    $logged_in_content = "";
    if(is_user_logged_in()){
        $logged_in_content = do_shortcode($content);
    }
    return $logged_in_content;  
}
add_shortcode(\'logged-in-content\',\'content_for_logged_in\');
快乐的编码!

SO网友:ScottM

我找到了一种方法来实现我现在所需要的。。。

    function content_for_logged_in($atts,$content){
            $logged_in_content = "";
            $embedded_shortcode = $atts[\'embedded_shortcode\'];
            if(is_user_logged_in()){
                $logged_in_content = $content;
                if(!empty($embedded_shortcode)) {
                    $logged_in_content .= do_shortcode(\'[\'.$embedded_shortcode.\']\');
                }
            }
            return $logged_in_content;  
        }

add_shortcode(\'logged-in-content\',\'content_for_logged_in\');
然后是:

[logged-in-content embedded_shortcode="wpforms id=752"]
    <p>Use the form below to upload photos for the Photo Galleries page.</p>
[/logged-in-content]
我仍然很感兴趣,如果有什么方法可以这样做,使实际的短代码可以在封闭的短代码的$内容区域内,以防有时我想这样做,以便我可以将嵌入的短代码放置在内容的其他地方,或者可以在$内容区域内执行多个短代码。

为了满足我的迫切需要,上述解决方案起到了关键作用。

相关推荐

Custom Post type shortcodes

我使用高级自定义字段在我的主题中创建自定义帖子类型(功能)。我想知道如何创建自定义帖子类型的短代码。因此,我只使用任何页面的自定义帖子类型的短代码来显示我在自定义帖子类型(功能)中添加的信息。