【问题标题】:How to Save Contact form 7 Shortcode to wp_options database如何将联系表格 7 简码保存到 wp_options 数据库
【发布时间】:2018-06-23 16:24:24
【问题描述】:

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

工作流程:

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

2.用户在插件的设置表单中输入值/简码

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

4.插件将值/简码保存在 wp_options 数据库中

5.Plugin echo out 或 do_shortcode 显示 values/shortcode/CF7 表单

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

[contact-form-7 id="4" title="联系表格 1"]

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

[contact-form-7 id=\"4\" title=\"联系表格1\"]

我尝试使用 esc_attr() 但它不起作用。

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

如何按原样保存联系表格 7 短代码 到 wp_options 数据库,以便我可以回显 do_shortcode('theshortcode') ?

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

<?php

global $options;
$cform_shortcode = esc_attr($_POST['cform_shortcode']);
$options['cform_shortcode'] = $cform_shortcode;
update_option('plugin_databasename_db', $options);
$options = get_option('plugin_databasename_db');
$cform_shortcode = $options['cform_shortcode'];
?>

<table>
    <tr>
    <td scope="row"><label for="tablecell">
    Contact Form ShortCode
    </label></td>
    <td scope="row"><label for="tablecell">
    <textarea name="cform_shortcode" id="" cols="80" rows="3"><?php if (isset($cform_shortcode)) {echo $cform_shortcode;} else {'';} ?></textarea>
    </label></td>
    </tr>
</table>

这是前端的代码:

<?php 
global $options; 
$options = get_option('plugin_databasename_db');

if ( isset( $options['cform_title'] ) && isset( $options['cform_shortcode'] ) ){ ?>
<p class="wpic-strong"><?php echo $options['cform_title']?></p>
<div class="list-group-item-video">
  <?php echo do_shortcode($options['cform_shortcode']);	?>
</div>
<br/>
<?php	
} else {
'';
}			
?>

【问题讨论】:

  • 这应该可以,但是您没有提供足够的信息来进行故障排除。您的代码在哪里显示如何将短代码保存到选项表?以及从选项表中将其加载回哪里?
  • @cale_b 感谢您的回复。请看上面的代码。刚刚添加。
  • 短代码必须用方括号括起来,即使在 do_shortcode 函数内也是如此。所以 - 答案是do_shortcode('[' . stripslashes($options['cform_shortcode']) . ']');
  • @cale_b... 感谢您抽出宝贵时间,非常感谢。我试过你的代码,它返回 --> [contact-form-7 id=\"4\" title=\"Contact form 1\"]。所以我坚持使用另一个有效的方法。再次感谢您的帮助。

标签: php wordpress contact-form-7 wordpress-shortcode


【解决方案1】:

暂时替换这个:

<?php echo do_shortcode($options['cform_shortcode']);   ?>

用这个:

<?php echo do_shortcode('[contact-form-7 id="4" title="Contact form 1"]');  ?>

只是看看它是否有效(那样)。

[编辑] 保存的值可能包含\,所以试试这个:

<?php echo do_shortcode( wp_unslash($options['cform_shortcode']) ); ?>

[编辑#2] 在这种情况下(即&amp;quot; 事物),这是因为您在将用户输入保存到数据库时使用了esc_attr 函数。

所以使用sanitize_text_field(去除HTML标签)而不是esc_attr(不去除HTML标签,但将它们转换成HTML实体):

$cform_shortcode = sanitize_text_field( wp_unslash($_POST['cform_shortcode']) );

然后通过后端表单重新保存选项(即 Contact Form 7 Shortcode)。之后,看看do_shortcode这个东西在前端是否有效。

【讨论】:

  • 这个有效。
  • 这可能不能解决问题,但值得一试。你能分享var_dump($options['cform_shortcode'])的输出吗?
  • 感谢您的帮助。 var_dump 结果是 --> string(66) "[contact-form-7 id="4" title="Contact form 1"]"
  • 非常感谢您的帮助。对此,我真的非常感激。是的 sanitize_text_field 解决了这个问题。简码有效,现在可以看到联系表格。
  • @Sally - 您在此答案中的开场白有两个问题:1)它没有必要,2)它不正确,因为它提到了“上面的答案” - 答案“上下移动”基于投票,是否被接受等 - 所以在引用另一个答案时,建议获取链接(答案左下方的灰色小“分享”按钮将为您提供链接)
猜你喜欢
  • 2020-08-01
  • 1970-01-01
  • 2018-10-18
  • 2018-07-18
  • 1970-01-01
  • 2016-08-06
  • 2022-01-20
  • 1970-01-01
  • 2016-04-20
相关资源
最近更新 更多