この記事にはプロモーションが含まれています。

【WordPress】固定・投稿ページ編集画面にCSSやJSの入力フォームを設置する

【WordPress】固定・投稿ページ編集画面にCSSやJSの入力フォームを設置する

ケケンタ

特定の固定ページや投稿ページごとに簡単にCSSとかJavaScriptを設定できるようにしたいな……

今回はこのようなお悩みをお持ちの方に向けて

固定ページ編集画面や投稿ページ編集画面に
CSSやJavaScript用の入力フォームを設置(自作)する方法

をご紹介します。

入力フォームの見た目

CSS・JavaScript入力用フォーム
CSS・JavaScript入力用フォーム

実は、プラグイン『WP Add Custom CSS』を使用すれば、CSSとJS専用の入力フォームは簡単に設置できます。

しかし、このプラグインを使用する上での懸念点として、最終更新が「2022年」で止まっていることが挙げられます。

プラグインの更新が止まっているということは、その分だけ最新のセキュリティリスクに対応できていない可能性が高いため、人によってはこのプラグインの使用は避けたいと考えるかと思います。

今回はそのような方へ向けて、CSSやJavaScript用の入力フォームを自作するためのソースコードをご紹介します。

ケケンタ

この入力フォームに記述されたCSSやJavaScriptは、そのページにしか反映されません!
つまりページごとのCSS・JavaScriptの個別設定がめちゃくちゃ簡単にできるということです!

ソースコードをfunctions.phpに貼りつけるだけで誰でも簡単に設置できるので、ぜひお試しください。

目次

kindle日替わりセールバナー

————

WordPressのスキルを伸ばしたい方おすすめの書籍



【ソースコード】固定・投稿ページ編集画面にCSSやJSの入力用フォームを設置

以下のソースコードをfunction.phpに追記するだけで簡単に固定・投稿編集ページにCSSやJavaScriptの入力フォームが設置できます。

functions.phpを編集する際は必ずバックアップをお取りください。

// 投稿画面にカスタム CSS を追加
add_action('admin_menu', 'custom_css_hooks');
add_action('save_post',  'save_custom_css');
add_action('wp_head',    'insert_custom_css');

function custom_css_hooks() {
	// 投稿ページ編集画面用
	add_meta_box('custom_css', 'カスタム CSS', 'custom_css_input', 'post', 'normal', 'high');
	// 固定ページ編集画面用
	add_meta_box('custom_css', 'カスタム CSS', 'custom_css_input', 'page', 'normal', 'high');
}

function custom_css_input() {
    global $post;
	echo '<input type="hidden" name="custom_css_noncename" id="custom_css_noncename" value="' . wp_create_nonce('custom-css') . '" />';
	echo '<textarea name="custom_css" id="custom_css" rows="5" cols="30" style="width:100%;">' . get_post_meta($post->ID, '_custom_css', true) . '</textarea>';
}

function save_custom_css($post_id) {
	if ( ! isset( $_POST['custom_css_noncename'] ) ) return $post_id;
    if ( ! wp_verify_nonce($_POST['custom_css_noncename'], 'custom-css')) return $post_id;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
    $custom_css = $_POST['custom_css'];
    update_post_meta($post_id, '_custom_css', $custom_css);
}

function insert_custom_css() {
    if (is_page() || is_single()) {
        if (have_posts()) : 
            while (have_posts()) : the_post();
                echo '<style type="text/css">' . get_post_meta(get_the_ID(), '_custom_css', true) . '</style>';
            endwhile; 
        endif;
        rewind_posts();
    }
}

もちろん片方だけ設置しても問題ありません。

【解説】CSSの入力フォーム(例)

簡単にはなりますが、以下よりCSSの入力フォームを例に挙げてソースコードの解説をします。

ケケンタ

ご自身で調整したいときのご参考にしていただければと思います!

① 「投稿ページ編集画面用」と「固定ページ編集画面」にそれぞれ入力フォームの設置を指定

function custom_css_hooks() {
	// 投稿ページ編集画面用
	add_meta_box('custom_css', 'カスタム CSS', 'custom_css_input', 'post', 'normal', 'high');
	// 固定ページ編集画面用
	add_meta_box('custom_css', 'カスタム CSS', 'custom_css_input', 'page', 'normal', 'high');
}
ポイント
  • カスタム CSS → 入力フォームの上部に表示されるフォームタイトル(※自由に変更可)
  • post → 投稿ページ編集画面のこと
  • page → 固定ページ編集画面のこと

出力する入力フォームをHTMLで記述

function custom_css_input() {
    global $post;
	echo '<input type="hidden" name="custom_css_noncename" id="custom_css_noncename" value="' . wp_create_nonce('custom-css') . '" />';
	echo '<textarea name="custom_css" id="custom_css" rows="5" cols="30" style="width:100%;">' . get_post_meta($post->ID, '_custom_css', true) . '</textarea>';
}

ハイライト行はCSRF攻撃対策用のトークンを生成している箇所になるので削除厳禁です!

CSRF攻撃については以下の記事で詳しく解説しています。

入力フォームの入力内容を保存する処理

function save_custom_css($post_id) {
	if ( ! isset( $_POST['custom_css_noncename'] ) ) return $post_id;
    if ( ! wp_verify_nonce($_POST['custom_css_noncename'], 'custom-css')) return $post_id;
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
    $custom_css = $_POST['custom_css'];
    update_post_meta($post_id, '_custom_css', $custom_css);
}

ハイライト行で②の処理で生成したトークンのチェックを行っているため削除厳禁です。
上記のソースコードは基本的にいじる必要はないかと思います。

④ 入力フォームのCSSを実際のページ上に反映

function insert_custom_css() {
    if (is_page() || is_single()) {
        if (have_posts()) : 
            while (have_posts()) : the_post();
                echo '<style type="text/css">' . get_post_meta(get_the_ID(), '_custom_css', true) . '</style>';
            endwhile; 
        endif;
        rewind_posts();
    }
}

上記のソースコードで入力フォームに入力されているCSSをページへ読み込んでいます。
※ここの処理も基本的に変更する必要はありません。

【補足】CSS用とJavaScript用ソースコードの違い

CSS用とJavaScript用ソースコードで、ひとつだけ違う点があるため念のため補足します。

ケケンタ

以下のソースコードで該当する行(4行目)をハイライトしました。

// 投稿画面にカスタム CSS を追加
add_action('admin_menu', 'custom_css_hooks');
add_action('save_post',  'save_custom_css');
add_action('wp_head',    'insert_custom_css');

~ 以下、省略 ~

ご覧いただくと、CSSでは「wp_head」、JavaScriptでは「wp_footer」という記述になっています。

これは分かりやすく言うと、以下のような違いになっています。

  • CSS → headタグ内で読み込む
  • JavaScript → bodyの閉じタグ直前で読み込む
ケケンタ

Web制作の知識をお持ちの方ならお分かりいただけるかと思いますが、JavaScriptは、HTML要素が読み込まれたあとに処理が実行されないと、思うような動きにならない場合があります。

それを防ぐために、今回ご紹介するソースコードでも、JavaScriptの読み込みはあくまで「bodyの閉じタグ直前」になるよう記述しています。

まとめ

いかがだったでしょうか。

今回は、固定ページ編集画面・投稿ページ編集画面にCSSやJavaScript用の入力フォームを設置するためのソースコードをご紹介しました。

ケケンタ

ご紹介したソースコードをfunctions.phpに追記するだけで誰でも簡単に入力フォームを設置できるので、ぜひお試しください!

ちなみにですが、この記事でも使用している「SWELL」というテーマでは、functions.phpをいじらなくても、デフォルトでCSS・JavaScript用の入力フォームが設置されています。

しかも以下の画像ようにチェックボックスで細かな設定もできるようになっているので大変便利です。

SWELLのカスタムCSS&JSの入力フォーム
SWELLのカスタムCSS&JSの入力フォーム
ケケンタ

ご興味のある方は以下のボタンよりテーマ公式サイトをご覧ください。

それでは、最後までご覧いただきありがとうございました!

WordPressで固定・投稿編集ページにCSSやJSの入力フォームを設置する方法のアイキャッチ画像

この記事が気に入ったら
フォローしてね!

この記事が良いと思ったらシェアしてね!

コメント

コメントする

CAPTCHA


目次