9ml

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>
ホームに戻る