如何将 Contact form 7 简码保存到 wp_options 数据库
How to Save Contact form 7 Shortcode to wp_options database
我正在构建一个自定义 wordpress 插件,它将在主页上显示 contactform7 表单。
工作流程:
1.User create the form using contactform7 and copy the shortcode
2.Users input the value/shortcode on the plugin's setting form
3.Plugin capture the value/shortcode using $_POST['the-shortcode']
4.Plugin save the value/shortcode on wp_options database
5.Plugin echo out or do_shortcode to display the values/shortcode/CF7 form
我的问题:
每当我保存联系表 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_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 {
'';
}
?>
暂时替换为:
<?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]
在那种情况下(即 "
事情),这是因为您在将用户输入保存到数据库时使用了 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
东西是否在前端工作。
我正在构建一个自定义 wordpress 插件,它将在主页上显示 contactform7 表单。
工作流程:
1.User create the form using contactform7 and copy the shortcode
2.Users input the value/shortcode on the plugin's setting form
3.Plugin capture the value/shortcode using $_POST['the-shortcode']
4.Plugin save the value/shortcode on wp_options database
5.Plugin echo out or do_shortcode to display the values/shortcode/CF7 form
我的问题: 每当我保存联系表 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_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 {
'';
}
?>
暂时替换为:
<?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]
在那种情况下(即 "
事情),这是因为您在将用户输入保存到数据库时使用了 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
东西是否在前端工作。