0

ホームページに contactform7 フォームを表示するカスタム wordpress プラグインを作成しています。

ワークフロー :

1.ユーザーはcontactform7を使用してフォームを作成し、ショートコードをコピーします

2.ユーザーはプラグインの設定フォームに値/ショートコードを入力します

3.プラグインは、$_POST['the-shortcode'] を使用して値/ショートコードをキャプチャします

4.プラグインは値/ショートコードをwp_optionsデータベースに保存します

5.エコーアウトまたはdo_shortcodeをプラグインして、値/ショートコード/CF7フォームを表示します

私の問題:プラグインの設定フォームを介してコンタクトフォーム7ショートコードを保存するたびに

[contact-form-7 id="4" title="お問い合わせフォーム 1"]

このようになります: (いくつかの \ があることに注意してください)

[contact-form-7 id=\"4\" title=\"お問い合わせフォーム 1\"]

esc_attr() を使用しようとしましたが、機能しませんでした。

esc_attr($_POST['ショートコード'])

do_shortcode('theshortcode') をエコーできるように、連絡先フォーム 7 のショートコードをそのまま wp_options データベースに保存するにはどうすればよいですか?

これは、プラグインの設定フォームのコードです:

<?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 {
'';
}			
?>

4

1 に答える 1

3

これを一時的に置き換えます。

<?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ユーザーの入力をデータベースに保存したときに関数を使用したためです。

したがって、 ( HTML タグを削除せずに HTML エンティティに変換するsanitize_text_field) の代わりに(HTML タグを削除する) を使用します。esc_attr

$cform_shortcode = sanitize_text_field( wp_unslash($_POST['cform_shortcode']) );

そして、バックエンド フォームを介してオプション (つまり、Contact Form 7 ショートコード) を再保存します。その後do_shortcode、フロントエンドで動作するかどうかを確認します。

于 2018-01-15T06:12:10.237 に答える