2. APIを使用せず埋め込みコードを保存する
sanitize_text_field関数はHTMLタグを除去するので、埋め込みコードをinputタグに入力しても除去されてしまいます。
wp_kses_post関数を使えば、サニタイズしつつ特定のHTMLタグだけ許可することができます。
<?php
if ( isset($_POST['submit_instagram']) ) {
global $wpdb;
$table_name = $wpdb->prefix . 'instagram';
$data = array(
'channel_name' => sanitize_text_field($_POST['input_channel_name']),
'embed_code' => wp_kses_post($_POST['input_embed_code'])
);
$format = array('%s', '%s');
$inserted = $wpdb->insert($table_name, $data, $format);
if ($inserted === false) {
echo "INSERT ERROR";
} else {
echo "保存されました";
echo esc_html($_POST['input_embed_code']); // esc_htmlを使ってHTMLタグをエスケープする
}
}
?>
<form method='post' action=''>
<input type='text' name='input_channel_name' placeholder='チャンネル名'>
<input type='text' name='input_embed_code' placeholder='埋め込みコード'>
<input type='submit' name='submit_instagram' value='送信'>
</form>
wp_kses関数を使って、手動で許可するHTMLタグを設定してもいいです。
<?php
if ( isset($_POST['submit_instagram']) ) {
global $wpdb;
$table_name = $wpdb->prefix . 'instagram';
// Instagram埋め込みに必要なタグと属性を許可
$allowed_tags = array(
'iframe' => array(
'src' => true,
'width' => true,
'height' => true,
'frameborder' => true,
'allowfullscreen' => true,
),
'script' => array(
'src' => true,
'type' => true,
),
);
$data = array(
'channel_name' => sanitize_text_field($_POST['input_channel_name']),
'embed_code' => wp_kses($_POST['input_embed_code'], $allowed_tags), // wp_ksesを使って必要なタグを許可
);
$format = array('%s', '%s');
$inserted = $wpdb->insert($table_name, $data, $format);
if ($inserted === false) {
echo "INSERT ERROR";
} else {
echo "保存されました";
echo $_POST['input_embed_code'];
}
}
?>
<form method='post' action=''>
<input type='text' name='input_channel_name' placeholder='チャンネル名'>
<input type='text' name='input_embed_code' placeholder='埋め込みコード'>
<input type='submit' name='submit_instagram' value='送信'>
</form>