我破解了联系表7的短代码!

时间:2015-06-03 作者:Paul

我应该限定这个头衔。这个短代码本身很好,毫无疑问与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] 短代码!知道我做错了什么吗?

2 个回复
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或标题,可以通过成员快捷码传递这些参数。

SO网友:jdm2112

格达尼尔关于钱的评论是对的。为了正确处理嵌套的短代码,可以将$content 使用do\\u shortcode()。

您的成员处理程序将成为:

function member_check_shortcode( $atts, $content = null ) {
 if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
    return do_shortcode($content);
return \'\';
}`

结束

相关推荐

Shortcode not accepting atts

我一直在研究一个短代码,我在传递$ATT时遇到了问题。我不知道我做错了什么。换言之,我无法通过在短代码中插入新值将“input\\u product\\u image\\u ID”更新为与默认值13不同的值。例如,此短代码仍将返回13,而不是12:[product\\u picture input\\u product\\u image\\u ID=“12”]我的代码:function article_image_insert_shortcode($atts) { extract(short

我破解了联系表7的短代码! - 小码农CODE - 行之有效找到问题解决它

我破解了联系表7的短代码!

时间:2015-06-03 作者:Paul

我应该限定这个头衔。这个短代码本身很好,毫无疑问与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] 短代码!知道我做错了什么吗?

2 个回复
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或标题,可以通过成员快捷码传递这些参数。

SO网友:jdm2112

格达尼尔关于钱的评论是对的。为了正确处理嵌套的短代码,可以将$content 使用do\\u shortcode()。

您的成员处理程序将成为:

function member_check_shortcode( $atts, $content = null ) {
 if ( is_user_logged_in() && !is_null( $content ) && !is_feed() )
    return do_shortcode($content);
return \'\';
}`

相关推荐

Namespaced shortcode?

我正在改造一个旧的WP站点,该站点有许多自定义的短代码,显然由于代码当前的组织方式,这些短代码在性能方面付出了代价。当然,我可以修复优化不好的代码,使用十几个短代码,并且一天就可以完成,但我想知道如何更好地组织它们。根据WordPress\'documentation, 建议将它们放在插件中并在上初始化init. 我们可以通过这样“命名”它们来减少这个钩子中的负载吗?[com.company shortcode attr=\"attr\" prop=\"prop\"] 有人尝试过这样的解决方案吗