プラグインのオプションパネルで作業しています。そして、配列が投稿され、オプションテーブルに更新されます。 array_map()関数を使用して、sanitize_text_fields()で配列を反復処理しています
これはこれを行うのに最適な方法ですか?
if( ! empty( $_POST['my_array'] ) ) {
foreach( $_POST['my_array'] as $value ) {
$value = array_map( 'sanitize_text_field', $value );
update_option( 'my_option_value', $value );
}
}
それはおそらく素晴らしいアイデアではありません。まず、他のフィールドタイプがある場合は、より適切な関数を使用する必要があります。たとえば、textarea
フィールドはsanitize_textarea_field()
でサニタイズし、カラーピッカーはsanitize_hex_color()
でサニタイズする必要があります。
また、_$_POST
_には、保存しないフィールドも含まれている可能性が高いことを考慮する必要があります。 API:_option_page
_、action
__wpnonce
_、および__wp_http_referer
_。
最後に、関数は基本的にすべての入力を受け入れ、それをデータベースに追加することを意味します。入力をサニタイズしてエスケープすることは、それらがあまり大きなダメージを与えることができないことを意味しますが、それでも防御的にコーディングしていません。理想的には、送信する予定の入力をホワイトリストに登録し、それらのみを送信することをお勧めします。
ただし、設定またはカスタマイズAPIを適切に使用している場合は、_$_POST
_を処理する必要はまったくないため、このオプションパネルを正しく構築していないことがわかります。これらのAPIのいずれかを適切に使用する場合、設定の登録時にサニタイズ機能を指定でき、送信の操作は必要ありません。
私はあなたが正しい道にいると思います。改善するためにできることは次のとおりです。
関数内のロジックを分離して読みやすくするか、何をしているのかを適切にコメントします。例えば。:
...
function mytheme_sanitize_fields($fields){
foreach($fields as $field){
mytheme_sanitize_field($field);
}
}
function mytheme_sanitize_field($field){
if( is_array($field){
$value = array_map( 'sanitize_text_field', $field );
}
else{
$value = sanitize_text_field($field);
}
update_option('yourkey', $value);
...
}
...
mytheme_sanitize_fields($_POST);
...
}