我应该限定这个头衔。这个短代码本身很好,毫无疑问与CF7中导致此问题的人员无关。我肯定是我,但在它后面直接添加了另一个短代码后,它就不起作用了。故事是这样的:
我有一个页面,该页面应该向未登录的用户显示一些文本,然后在用户登录时显示一个提交表单(在同一页面上)。我在我的functions.php
如下所示:
add_shortcode( \'visitor\', \'visitor_check_shortcode\' );
function visitor_check_shortcode( $atts, $content = null ) {
if ( ( !is_user_logged_in() && !is_null( $content ) ) || is_feed() )
return $content;
return \'\';
}
add_shortcode( \'member\', \'member_check_shortcode\' );
function member_check_shortcode( $atts, $content = null ) {
if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
return $content;
return \'\';
}`
然后,我在页面上用短代码包装了适当的文本,如下所示:
[visitor]
the text that appears to non logged-in users
[/visitor]
[member]
the text that appears to logged-in users and this form:
[contact-form-7 id="26" title="Submit your work"]
[/member]
问题是
[/member]
短代码就位后,将禁用联系人表单7短代码。这样,它就会像上面一样出现在页面上(即一个短代码字符串),而不会显示表单。如果我删除
[/member]
shortcode,联系人表单再次工作。但我需要
[/member]
短代码!知道我做错了什么吗?
SO网友:gdaniel
从codex:
短代码解析器对post内容使用一次传递。这意味着,如果短代码处理程序的$content参数包含另一个短代码,则不会对其进行分析。http://codex.wordpress.org/Shortcode_API
codex还为您的问题提供了解决方案,即使用函数do\\u shortcode()
如果封闭的短代码旨在允许在其输出中使用其他短代码,则处理程序函数可以递归调用do\\u shortcode():
function caption_shortcode( $atts, $content = null ) {
return \'<span class="caption">\' . do_shortcode($content) . \'</span>\';
}
因此,在您的情况下,您需要编辑members函数以在其中包含表单快捷码。可能是这样的:
function member_check_shortcode( $atts, $content = null ) {
if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
return $content . do_shortcode([contact-form-7 id="26" title="Submit your work"]);
return \'\';
}`
如果需要动态更改表单ID或标题,可以通过成员快捷码传递这些参数。