Php 如何将联系人表单7短代码保存到wp_选项数据库

Php 如何将联系人表单7短代码保存到wp_选项数据库,php,wordpress,contact-form-7,wordpress-shortcode,Php,Wordpress,Contact Form 7,Wordpress Shortcode,我正在构建一个自定义wordpress插件,它将在主页上显示contactform7表单 工作流程: 1.用户使用contactform7创建表单并复制快捷码 2.用户在插件的设置表单上输入值/快捷码 3.插件使用$_POST['the-shortcode']捕获值/短码 4.插件将值/快捷码保存在wp_选项数据库中 5.插件echo out或do_shortcode显示值/shortcode/CF7表单 我的问题: 每当我保存联系人表单7快捷码时 通过插件的设置表单 [contact-form

我正在构建一个自定义wordpress插件,它将在主页上显示contactform7表单

工作流程:

1.用户使用contactform7创建表单并复制快捷码

2.用户在插件的设置表单上输入值/快捷码

3.插件使用$_POST['the-shortcode']捕获值/短码

4.插件将值/快捷码保存在wp_选项数据库中

5.插件echo out或do_shortcode显示值/shortcode/CF7表单

我的问题: 每当我保存联系人表单7快捷码时 通过插件的设置表单

[contact-form-7 id=“4”title=“contact-form 1”]

它变成这样:(注意有一些\)

[contact-form-7 id=\'4\'title=\\'contact-form 1\']

我尝试使用esc_attr(),但没有成功

esc_attr($_POST['the-shortcode']))

如何按原样保存联系人表单7快捷码 到wp_选项数据库,以便我可以回显do_短代码(“短代码”)?

这是插件设置表单的代码:


接触式短码

暂时替换此:

<?php echo do_shortcode($options['cform_shortcode']);   ?>
[编辑#2] 在这种情况下(即
事件),这是因为您在将用户输入保存到数据库时使用了
esc\u attr
功能

因此,请使用
sanitize_text_field
(去掉HTML标记),而不是
esc_attr
(不去掉HTML标记,但将它们转换为HTML实体):


然后通过后端表单重新保存选项(即联系人表单7短代码)。然后,查看前端的
do\u短代码是否有效。

临时替换此选项:

<?php echo do_shortcode($options['cform_shortcode']);   ?>
[编辑#2] 在这种情况下(即
事件),这是因为您在将用户输入保存到数据库时使用了
esc\u attr
功能

因此,请使用
sanitize_text_field
(去掉HTML标记),而不是
esc_attr
(不去掉HTML标记,但将它们转换为HTML实体):


然后通过后端表单重新保存选项(即联系人表单7快捷码)。然后,查看前端的
do\u shortcode
功能是否正常。

这应该可以,但您没有提供足够的信息进行故障排除。您的代码在哪里显示了如何将短代码保存到选项表?您从选项表中的哪个位置加载它?@cale_b感谢您的回复。请看上面的代码。刚刚添加的。短代码必须用方括号括起来,即使在
do\u短代码
函数中也是如此。所以-答案是
do_shortcode('['.stripslashes($options['cform_shortcode'])。])@cale\u b。。。谢谢你花时间在这件事上,真的很感激。我尝试了你的代码,它返回-->[contact-form-7id=\“4\”title=\“contact-form 1\”]。所以我坚持使用另一个可行的方法。再次感谢您的帮助。这应该可行,但您没有提供足够的信息进行故障排除。您的代码在哪里显示了如何将短代码保存到选项表?您从选项表中的哪个位置加载它?@cale_b感谢您的回复。请看上面的代码。刚刚添加的。短代码必须用方括号括起来,即使在
do\u短代码
函数中也是如此。所以-答案是
do_shortcode('['.stripslashes($options['cform_shortcode'])。])@cale\u b。。。谢谢你花时间在这件事上,真的很感激。我尝试了你的代码,它返回-->[contact-form-7id=\“4\”title=\“contact-form 1\”]。所以我坚持使用另一个有效的。再次感谢你的帮助。这个有效。这也许不能解决问题,但值得一试。。你能分享
var\u dump($options['cform\u shortcode'])的输出吗
?谢谢你的帮助。变量转储结果是-->字符串(66)“[contact-form-7 id=“4”title=“contact-form 1”]”非常感谢您的帮助。我真的很感激。是,清理文本字段解决了问题。快捷码有效,联系人表单现在可见。@Sally-您在回答中的开头有两个问题:1)它不是必需的,2)它不正确,因为它提到了“上面的答案”-答案根据投票“上下移动”,无论是否接受,等等-因此,当引用其他答案时,建议获取链接(答案左下角的灰色小“Share”(共享)按钮将为您提供链接)此按钮有效。这可能无法解决问题,但值得尝试。您能否共享
var\u dump($options['cform\u shortcode'])的输出?
?感谢您的帮助。var\u dump结果是-->string(66)”[contact-form-7 id=“4”title=“contact-form 1“]”“非常感谢您的帮助。我真的很感激。是的,清理文本字段解决了问题。快捷码有效,联系人表单现在可见。@Sally-您在这个答案中的开头有两个问题:1)没有必要,2)不正确,因为它提到了“上面的答案”-“答案”移动“根据投票情况上下浮动,无论是否接受,等等-因此,当参考另一个答案时,建议获得链接(答案左下角的小灰色“共享”按钮将为您提供链接)
<?php echo do_shortcode( wp_unslash($options['cform_shortcode']) ); ?>
$cform_shortcode = sanitize_text_field( wp_unslash($_POST['cform_shortcode']) );