Как сохранить контактную форму 7 Shortcode в базу данных wp_options

Я создаю собственный плагин WordPress, который будет отображать форму contactform7 на главной странице.

Рабочий процесс:

1. Создайте форму с помощью contactform7 и скопируйте шорткод

2. Пользователи вводят значение / шорткод в форму настройки плагина

3. Плагин захватывает значение / шорткод, используя $ _POST ['the-shortcode']

4.Плагин сохраняет значение / шорткод в базе данных wp_options

5.Плагин 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 ответ

Решение

Временно замените это:

<?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']) );

Затем повторно сохраните параметры (т. Е. Шорткод контактной формы 7) через внутреннюю форму. После этого, посмотрите, если do_shortcode вещь работает на переднем конце.

Другие вопросы по тегам