Как сохранить шорткод контактной формы 7 в базу данных 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 {
'';
}			
?>


person jojoi    schedule 15.01.2018    source источник
comment
Это должно сработать, но вы не предоставили достаточно информации для устранения неполадок. Где ваш код, показывающий, как вы сохраняете шорткод в таблице параметров? А где его обратно загрузить из таблицы опций?   -  person random_user_name    schedule 15.01.2018
comment
@cale_b Спасибо за ответ. См. Приведенный выше код. просто добавил это.   -  person jojoi    schedule 15.01.2018
comment
Шорткод должен быть заключен в квадратные скобки даже внутри функции do_shortcode. Итак - ответ do_shortcode('[' . stripslashes($options['cform_shortcode']) . ']');   -  person random_user_name    schedule 15.01.2018
comment
@cale_b ... Спасибо, что уделили этому время, очень признательны. Я попробовал ваш код, и он вернул - ›[contact-form-7 id = \ 4 \ title = \ Contact form 1 \]. Так что я остановлюсь на другом, который работает. Еще раз спасибо за вашу помощь.   -  person jojoi    schedule 16.01.2018


Ответы (1)


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

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

с этим:

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

Просто чтобы посмотреть, работает ли это (таким образом).

[Edit] Сохраненное значение может содержать \, поэтому попробуйте следующее:

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

[Edit # 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 на интерфейсе.

person Sally CJ    schedule 15.01.2018
comment
Этот работает. ‹? Php echo do_shortcode ('[contact-form-7 id = 4 title = Контактная форма 1]'); ? › - person jojoi; 15.01.2018
comment
Возможно, это не решит проблему, но попробовать стоит .. Не могли бы вы поделиться выводом var_dump($options['cform_shortcode'])? - person Sally CJ; 15.01.2018
comment
Я ценю вашу помощь. Результат var_dump - ›строка (66) [contact-form-7 id = 4 title = Contact form 1] - person jojoi; 15.01.2018
comment
Примечание: это действительно странно. шорткод точно такой же, как и в var_dump (), но он возвращается как [contact-form-7 404 Not Found], когда я повторяю do_shortcode ($ options ['cform_shortcode']). Я проверил базу данных wp_options, вот что она сохранила в базе данных - ›s: 66: [contact-form-7 id = 4 title = Контактная форма 1] - person jojoi; 15.01.2018
comment
Огромное спасибо за вашу помощь. Я очень ценю это. Да sanitize_text_field решил проблему. Шорткод работает, и теперь отображается контактная форма. - person jojoi; 15.01.2018
comment
Я рад это слышать, и на самом деле я тоже узнал несколько хороших вещей из того, через что мы прошли по этому вопросу. Так что спасибо тебе тоже! - person Sally CJ; 15.01.2018
comment
@Sally - ваше вступительное предложение в этом ответе имеет две проблемы: 1) в нем нет необходимости и 2) оно неверно, поскольку в нем упоминается ответ выше - ответы перемещаются вверх и вниз в зависимости от голосов, независимо от того, приняты они или нет, и т. Д. - поэтому при ссылке другой ответ, рекомендуется получить ссылку (маленькая серая кнопка «Поделиться» в левом нижнем углу вашего ответа даст вам ссылку) - person random_user_name; 15.01.2018
comment
Спасибо за внимание @cale_b! - person Sally CJ; 22.01.2018