私はWordPressテーマを作成しています。このテーマでは、ユーザーがテーマオプションからカスタムCSSを追加することを許可しています。このCSSコードは、次のコードを使用して、ページのヘッドセクションに直接表示されます。
add_action('wp_head', 'theme_dynamic_css');
function theme_dynamic_css(){
global $my_theme_options;
$custom_css = '';
if (isset($my_theme_options['custom-css'])) {
$custom_css .= $my_theme_options['custom-css']."\r\n";
}
echo '<style id="my-theme-custom-css">'.$custom_css.'</style>';
}
ここでesc_html();
を使うべきですか?最初は、コードがスタイルタグの間にあるのであれば、問題にならないはずですが、今は混乱しています。
助けてください。
あなた(そしておそらくテーマ作家の99%)がやろうとしていることはただ間違っています。テーマをカスタマイズするためにCSSを知っていることをユーザーに期待するべきではありません。また、そのような低レベルに入る必要がある場合は、子テーマを作成してCSSファイルに変更内容を挿入するのが正しいでしょう。
CSSは一般的なHTMLではないので同じようにエスケープすることはできないので、記述した方法でCSSを入力するのは面倒ですが、それをサニタイズして削除することも不可能です。最終的には、ユーザーのCSSを壊さないようにするために「そのまま」出力する必要がありますが、そのような機能が最も有用な場所では、マルチサイトでもあります。安全でない.
CSSをヘッダーに直接印刷するのではなく(これはベストプラクティスではありません)、 wp_add_inline_style
でCSSを追加できます。 wp_enqueue_scripts
にフックして、テーマのスタイルシートの後にCSSを追加します。
だから、これはあなたのコードがどのようになるかです:
add_action('wp_enqueue_scripts', 'theme_dynamic_css');
function theme_dynamic_css(){
global $my_theme_options;
if (isset($my_theme_options['custom-css'])) {
$custom_css .= $my_theme_options['custom-css']."\r\n";
}
wp_add_inline_style('style', $custom_css);
}
以下を使用して、すでにテーマのメインスタイルシートをエンキューした後にこれを使用する必要があります。
wp_enqueue_style( 'style', get_stylesheet_uri());
スタイルシートに選択したIDにも注意してください。