如何保存联系表单7短编码到wp_options数据库

时间:2018-01-15 02:22:53

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

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

工作流程:

  

1.User使用contactform7创建表单并复制短代码

     

2.Users在插件的设置表单中输入值/短代码

     

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

     

4.Plugin在wp_options数据库中保存值/短代码

     

5.Plugin echo out或do_shortcode显示值/短代码/ CF7格式

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

  

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

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

  

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

我尝试使用esc_attr()但它没有用。

  

esc_attr($ _ POST [ '的-短码'])

如何保存联系表单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 {
'';
}			
?>

1 个答案:

答案 0 :(得分:2)

暂时取代:

<?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] 在这种情况下(即&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是否适用于前端。