WordPressのカスタマイザーに追加された『追加CSS(Additional CSS)』と子テーマのstyle.cssの使い分けをどのようにするか、というのは個人的に悩んでいました。
ヘッダーの最後にインラインで埋め込まれるので 『追加CSSは最強 』というのが世の中の流れです。一方で、『追加CSS』を使わない場合は、『子テーマのstyle.cssは最強』でなければならないというのが私の持論です。
しかし、国内では圧倒的な人気のTCDテーマではwp_headを使って、追加CSSよりも手間のヘッダーセクションにstyleをぶち込んできます。さらにそれは子テーマのstyle.cssを読み込んだ後なのです。そうなると、子テーマのstyle.cssが上書きされてしまい、子テーマ最強説が崩れます。
かといって、wp_headで子テーマのstyle.cssをヘッダーの一番最後に読み込むと、今度は『追加CSS』よりも後ろに行ってしまい、追加CSS最強説が崩れてしまう。
そもそも追加CSS自体もwp_headで読み込んでいるんじゃないの?だったらその優先順位がわかれば追加CSS直前に子テーマのstyle.cssを読み込むことができてTCDテーマのインラインスタイルを駆逐できますよね?というのがこの記事の内容です。
追加CSSがヘッダーで読まれる仕組み
追加CSSは、wp_headを使って読み込まれる仕組みです。
add_action( ‘wp_head’, ‘wp_custom_css_cb’, 101 );
なので、101よりも優先順位が低いwp_headでフックをかければ、追加CSSよりも手前で読み込まれます。
Additional CSS in the customiser is core WordPress functionality and shouldn’t behave differently between themes. You can see in
https://wordpress.stackexchange.com/questions/284004/how-does-additional-css-rendering-work/wp-includes/js/customize-preview.js
that the preview is simply JavaScript that simply sets the content of the<style id="wp-custom-css"></style>
element to the content of the Custom CSS text field. The<style>
element itself is added by thewp_custom_css_cb()
function hooked intowp_head
at priority101
. So as long as you have thewp_head()
function in your theme, it should behave exactly the same way.
TCDテーマのヘッダーで読み込まれるCSSの仕組みは?
TCDテーマで動的にヘッダーで読み込まれるインラインスタイルは、functions/head.phpで読み込まれる仕組みになっています。
そのファイルの最後を見ると、
add_action(“wp_head”, “tcd_head”);
という記述があります。優先順位は省略されているので10です。
追加CSSは最強のまま、TCDのインラインスタイルを子テーマのstyle.cssで上書きするには?
今までの調査で判明したのは、
- 『追加CSS』の優先順位が101
- TCDのインラインスタイルの優先順位が10
です。
TCDのインラインスタイルよりも優先順位を下げ、かつ、『追加CSS』よりも優先順位が高ければ、追加CSSは最強のまま、子テーマのstyle.cssからTCDのインラインスタイルを上書きできることになります。
子テーマのstyle.cssをwp_headで優先順位10<x<101で読み込めばよいことになります。以下の例は優先順位を99にした場合です。
add_action( 'wp_head', 'add_original_style_css', 99 );
function add_original_style_css() {
$s_dire_uri = get_stylesheet_directory_uri();
$date_query = date("ymdGis", filemtime( get_stylesheet_directory() . '/style.css'));
echo '<link rel="stylesheet" id="child-style" href="'. get_stylesheet_uri() .'?'.$date_query. '" type="text/css" media="all" />';
}
まとめ
テーマをオリジナルで作る場合は、そもそも子テーマという考え方はないのでこんな悩みはないのですが、TCDテーマを使っている人があまりにも多く、その時のカスタマイズで子テーマを作ったときに子テーマのstyle.cssを如何に読み込むべきかは結構悩んでいました。
この記事で、追加CSSと子テーマのstyle.css以外のインラインスタイルが埋め込まれた場合にどのように子テーマのstyle.cssを読み込めばよいのかスッキリしました。