3つのエスケープ処理、esc_url()、esc_url()、esc_attr()について使用例を紹介します。また、エスケープ処理の必要ないWordPress関数も合わせて紹介します。
エスケープ処理の必要性
WordPressで使われている関数をechoで表示するときには、セキュリティ対策としてエスケープ処理をする必要があります。エスケープ処理を怠ると、悪質なプログラムの介入によりWEBサイトに被害が発生する恐れがあるからです。
エスケープ処理を必要としない関数
the_◯◯◯といった、冒頭がtheで始まる関数には既にエスケープ処理が組み込まれているため、新たにエスケープ処理を施す必要はありません。
たとえば、エスケープ処理が必要のない関数は下記のとおりです。
<?php the_title();?> <!-- タイトルを表示 -->
<?php the_time('Y年n月j日') ?> <!-- 投稿日を表示 -->
<?php the_post_thumbnail('medium'); ?> <!-- サムネイルを表示 -->
<?php the_excerpt(); ?> <!-- 抜粋を表示 -->
<?php the_content(); ?> <!-- コンテンツを表示 -->
<?php the_permalink(); ?> <!-- パーマリンクを表示 -->
しかし、the_◯◯◯と似た関数で、get_the_で始まる関数をechoで出力する時にはエスケープ処理が必要です。そもそも、get_the_で始まる関数をechoで出力したい場合には、echoを使わずに、上で紹介したthe_で始まる関数に置き換えて使って下さい。
エスケープ処理の方法
esc_url()|URLの場合
下記のようにURLを出力したい場合には、「esc_url()」を使ってエスケープ処理します。
<a href="<?php echo esc_url(home_url('/')); ?>hoge/hogehoge" class="hoge">hoge</a>
使い方は、esc_url()の()の中に、URL関数をまるごと入れるイメージです。
esc_html()|文字列の場合
下記のように配列から文字列を表示させる場合などには、「esc_html()」を使って、エスケープ処理します。
echo esc_html($term->name);
使い方は、esc_html()の()の中に文字列を出力する関数を入れるイメージです。
esc_attr()|HTML属性の場合
下記のようにclass属性やatl属性などを出力したい場合には、「esc_attr()」を使ってエスケープ処理します。ただし、href属性やsrc属性など、URLに関する属性は最初に紹介したesc_url()を使うのが望ましいと言われています。
<div class="<?php echo esc_attr($catslug); ?>">
使い方は、esc_attr()の()の中に属性を出力する関数を入れるイメージです。