Я создаю собственный плагин 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 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']) );
Затем повторно сохраните параметры (т. Е. Шорткод контактной формы 7) через внутреннюю форму. После этого, посмотрите, если do_shortcode
вещь работает на переднем конце.
Других решений пока нет …