WordPressサイトを運用していると「このページにだけCSSを追記して少しデザインを変えたい……」と思う場合があります。
そんなときに役に立つカスタムCSSを導入する方法を紹介します。固定ページや投稿の1ページごとにCSSを独自に追記し、ページごとに少しずつデザインを変えさせる機能です。
カスタムCSSはカスタムフィールドを使うことで導入します。プラグインは使わず、子テーマを使ってカスタマイズを行います。
まずは子テーマを導入しましょう
テーマファイルに直接変更を加えるとテーマのアップデートで変更が失われるので、まずは子テーマを導入します。
子テーマの必要性と導入方法については、上記の記事を参考にしてください。
functions.phpに追記
子テーマファイル内のfunctions.phpに以下の通りにコードを追記します。
// カスタムフィールドの追加 function add_field_for_custom_css() { $screens = array( 'post', 'page' ); foreach ( $screens as $screen ) { add_meta_box( 'custom_css', 'カスタムCSS', 'create_custom_css', $screen ); } } add_action( 'add_meta_boxes', 'add_field_for_custom_css' ); // 記事・固定ページにカスタムCSSが使えるようにする function create_custom_css() { $keyname = 'custom_css'; global $post; $get_value = get_post_meta( $post->ID, $keyname, true ); wp_nonce_field( 'action-' . $keyname, 'nonce-' . $keyname ); echo '<textarea style="margin-top: 0px;margin-bottom: 0px;height: 82px;width: 100%;height: 150px;" placeholder="ここにCSSを書くと個別ページに反映されます。styleタグは不要です。" name="' . $keyname . '">' . $get_value . '</textarea>'; } // カスタムフィールドの保存 add_action( 'save_post', 'save_custom_css_field' ); function save_custom_css_field( $post_id ) { $custom_fields = ['custom_css']; foreach( $custom_fields as $d ) { if ( isset( $_POST['nonce-' . $d] ) && $_POST['nonce-' . $d] ) { if( check_admin_referer( 'action-' . $d, 'nonce-' . $d ) ) { if( isset( $_POST[$d] ) && $_POST[$d] ) { update_post_meta( $post_id, $d, $_POST[$d] ); } else { delete_post_meta( $post_id, $d, get_post_meta( $post_id, $d, true ) ); } } } } }
これで、投稿と固定ページで「カスタムCSS」のカスタムフィールドが追加されました。
続いて、カスタムCSSで記述した内容をCSSとして該当ページに出力できるよう、header.phpを編集します。
header.phpに追記
親テーマファイルのheader.phpを複製し、子テーマファイル内に配置してください。さらに、子テーマファイルheader.phpに以下のコードを追記します。
追記する位置は、</head>閉じタグの直前です。他のCSSファイルの読み込みなどよりも優先される必要があるので、必ず他のCSS読み込みタグや<?php wp_head(); ?>
よりも後に記述するようにします。
<?php if (is_singular() ) { $custom_css = get_post_meta($post->ID,'custom_css',true); if($custom_css) { echo <<<EOS <style> $custom_css </style> EOS; } } ?>
環境によってはエラーが出るのでインデントは利用しないことをおススメします。
ここまで作業すれば、投稿や固定ページの「カスタムCSS」に記述したCSSが、そのページにだけ適用されるようになるはずです。
CSSの書き方ですが、<style>タグは不要で以下のように書けば適用されます。
body { color: red; }
他の投稿タイプでもカスタムCSSを使えるようにするには
functions.phpに追記した$screens = array( 'post', 'page' );
の部分にカスタムCSSを適用したい投稿タイプのスラッグを追記すればOKです。
$screens = array( 'post', 'page', 'post_type' );