PR

【WordPress】SettingsAPIの設定画面をCSSでデザインカスタマイズ

SettingsAPIを使うと最初は面倒な気もしますが、慣れればアッという間に設定画面が作れちゃいますね。(ひな形みたいに使えるのがポイント)

その作った設定画面に対して、
ここではCSSを使ってデザインカスタマイズの仕方をご紹介。

設定画面のデザインカスタマイズってどうやるのか、
以下で作ったサンプルの設定画面に対して試しに一緒にやってみましょう。

⇒「Settings APIの使い方まとめ」に戻る

デザインカスタマイズのイメージ

設定画面なので、デザインカスタマイズのポイントは以下にしておきましょう。

  • シンプルであること
  • 分かりづらいと思われる個所のみデザインカスタマイズ

この考え方に基づくと、
例えば以下のようなところをカスタマイズしたくなりそうです。

  • ①:設定全体を分かりやすく
    (設定全体はこれ、と分かりやすくするよう)
    「全体を枠とかで囲ってみる」
  • ②:セクション名と設定項目を分かりやすく
    (セクション名と設定項目の見分けがすぐ着くように)
    「セクション名に背景色を付けてみる」
  • ③:設定項目名と入力欄の関連を分かりやすく
    (設定項目名と実際の入力欄などとの関連が分かりやすくなるよう)
    「設定項目名の幅を小さくする」
  • ④:不揃いをなくして見やすく
    (各入力欄の幅の不揃いをなくすよう)
    「各入力欄の横幅をそろえる」
  • ⑤:ガイドはガイドとして区別しやすく
    (ガイド文言が目立ちすぎないよう)
    「ガイド文言を若干小さく、色も少し薄くしてみる」
  • ⑥:選択ボタンは分かりやすく
    (ラジオボタン、チェックボックスの各項目がくっつき過ぎ、というのと、ボタンとボタンのラベル名(男性、旅行など)が近くて窮屈な感じがするので)
    「各項目の間を空けるよう、各項目の右に余白を設ける」
    「ボタンとボタンのラベル名の間も少し余白を設ける」

こんな感じでデザインカスタマイズしてみましょう。

HTMLの構造

Settings API で設定画面を作った時のHTML構造を見てみると、
以下のようになってますね。

グーグルクロームのデベロッパーツールで見たところ

イメージ的には以下のようになるでしょうか。

赤の部分がコードの中で自分で決めているところ。
(全体を囲むdivクラスの .wap とか設定全体のタイトルの h1タグなど)

青の部分が、Settings APIで自動で行っているところ。
(Settgins APIを使うと自動でテーブルにしてくれる)

CSSでデザインカスタマイズ

では実際にCSSで以下のようにしてみます。

Code
/* ------------------------------------
① 設定全体を囲って分かりやすく
------------------------------------ */
.wrap {
    max-width: 600px;			/* 横の最大幅 */
    border: 1px solid gray;	/* 線:1dot、gray色	*/
    padding: 2em;				/* 内側余白:2文字分 */
}

/* ------------------------------------
② セクション名を区別
------------------------------------ */
.wrap h2 {
    background: gray;		/* 背景色 */
    color: white;			/* 文字色 */
    padding: 0.5em 1em;	/* 内側余白)縦:.5文字文、横:1文字分 */
}

/* ------------------------------------
③ 設定項目名の幅を調整
------------------------------------ */
.wrap .form-table th {
    width: 90px;		/* 幅:少し狭める*/
}

/* ------------------------------------
④ 入力box(input, textarea)
------------------------------------ */
.wrap td input[type=text],
.wrap td textarea {
    width: 100%;		/* 横幅)外枠目いっぱいに広げる */
    max-width:400px;	/* 横幅)その中で最大400pxとしておく */
}

/* ------------------------------------
⑤ ガイド文言を控えめに
------------------------------------ */
.wrap td p {
    font-size:90%;	/* フォントサイズ:一回り小さく */
    color:gray;		/* 文字色をグレーにして控えめに */
}

/* ------------------------------------
⑥ ラジオボタン、チェックボックス
------------------------------------ */
.wrap td label{
    margin-right:1em;		/* 各項目の右側余白を1文字分空ける */
}

.wrap input[type="radio"],
.wrap input[type="checkbox"] {
	/* ボタンの右余白を設けて項目ラベルとの間を少し空ける */
    margin-right:0.5em!important;
	
	/* 使っているテーマですでに決められているようなので
	important を付けて優先させる */
}
Jin Simple Code Block

使っているテーマによって変わるかもしれませんが、
Cocoon を使って見たときの例。

このCSSを実際に適用させてみると設定画面は以下のようになります。

【元の設定画面(CSS反映前)】

↓↓↓↓↓↓
【CSS反映後】

ちょいとメリハリがついて、項目も選びやすくなった、
みたいな感じでしょうか。

全体の枠はなくても良いかも。

CSSの反映方法

自作設定画面へのCSSの反映には、プラグインで簡単に反映する方法と、個別ファイルにして読み込む方法があると思います。

その1)プラグインでお手軽に

自作のCSSをワードプレスの管理画面だけに反映させる、というのはお手軽です。自作の設定を自分だけで気楽に使うなどではこれでも良いですね。

この「ワードプレスの管理画面だけにCSSを反映させる」には、プラグインを使えば一瞬でできます。以下で解説してますので参照してみてください。

その2)別ファイルに分けて読み込み

自作の設定画面にCSSを反映させたい、その設定画面のみにCSSを反映させたい、という場合にはCSSを別ファイルにして読み込む、というのが良いですね。

分かりやすくなるよう、まず以下のようにフォルダ分けしてみましょう。

テーマフォルダー
images
css
plugins
myfunc
   ├ func1.php
   ├ func1-style.css
├ index.php
├ functions.php
├ ・・・・・

この例では「myfunc」というフォルダーをテーマフォルダのすぐ下に作り、
そこに作った設定の関数を「func1.php」、スタイルシート(CSSファイル)を「func1-style.css」として入れてます。

  • 設定のphpファイル :テーマフォルダー/myfunc/func1.php
  • CSSファイル :テーマフォルダー/myfunc/func1-style.css

functions.php で関数読み込み

まず「func1.php」を読み込むために、以下を functions.php に記述。

include_once( get_theme_file_path( 'myfunc/func1.php' ) );

「include_once」は指定のファイルを一度だけ読み込むという関数。
(一度でも読み込まれていれば2回目以降はスルー)

get_theme_file_path()」を使うことで、テーマ内にあるファイルの正しい場所を自動で取得してくれるため、読み込みエラーを防ぐことができます。

func1.phpはfunctions.phpと同じ階層の「myfunc」フォルダーに入れたので「myfunc/func1.php」と指定してます。

include_once() 以外も単に include() や require()を使って読み込む方法もありますが、使い分けなど詳しくは以下見てみてください。

※ WordPressには「get_template_part()」という関数もありますが、これは主にサイトの見た目(HTMLパーツ)を分割して読み込むためのもの。今回のような「設定画面の機能(PHPプログラム)」を読み込む場合は、確実に動作する「include_once」や「require_once」を使うのが良いです。

CSSファイルの読み込み

CSSファイルの読み込みでは、
Settings API で作った設定ファイルの修正がちょっと必要です。

以下で自作設定のサンプルを作りましたが、

このサンプルで作ったコードの基本部分(以下)に追加・修正をちょっと入れるだけ。

Code
<?php
// ------------------------------------
// 1)「メニュー情報」の関数名を指定(関数Bを指定)
// ------------------------------------
add_action( 'admin_menu', 'jin_test' );

// ------------------------------------
// 2)「メニュー情報」の関数の具体的内容(関数B)
// ------------------------------------
function jin_test(){
	add_options_page(
		'JIN Test Settings',		// ① ページタイトル
		'JINテスト用設定',			// ② メニュー名
		'manage_options',			// ③ メニューが表示されるユーザー権限
		'jin-test-setting-slug',	// ④ メニューのスラッグ
		'jin_test_setting_func'	// ⑤ 「設定画面」表示の関数名(関数Aを指定)
	);
}

// ------------------------------------
// 3)「設定画面」表示関数の具体的内容(関数A)
// ------------------------------------
function jin_test_setting_func(){


//以下省略

?>
Jin Simple Code Block

この基本部分でCSSファイル「func1-style.css」を読み込むよう、
以下のように追加・修正。

Code
<?php

// ★ 手順1:CSSファイルを「ワードプレスに登録」
function jin_register_test_styles() {
    wp_register_style( 
        'jin_func1_style', 
        get_theme_file_uri( 'myfunc/func1-style.css' ), 
        array(), 
        filemtime( get_theme_file_path( 'myfunc/func1-style.css' ) ) 
    );
}
add_action( 'admin_enqueue_scripts', 'jin_register_test_styles' );


// ★ 手順2:登録したCSSの「読み込み関数を用意」
function jin_load_test_styles() {
    wp_enqueue_style( 'jin_func1_style' );
}

// ------------------------------------
// 1)「メニュー情報」の関数名を指定(関数Bを指定)
// ------------------------------------
add_action( 'admin_menu', 'jin_test' );

// ------------------------------------
// 2)「メニュー情報」の関数の具体的内容(関数B)
// ------------------------------------
function jin_test(){
        $page_hook = add_options_page(
                'JIN Test Settings',
                'JINテスト用設定',
                'manage_options',
                'jin-test-setting-slug',
                'jin_test_setting_func'
        );

        // ★ 手順3:設定ページで「実際にCSSの読み込み」
        // 管理画面のスクリプト読み込み時に実行
        add_action( 'admin_enqueue_scripts', function( $current_hook ) use ( $page_hook ) {
                // この設定画面の時だけ、手順2の関数を呼び出す
                if ( $current_hook === $page_hook ) {
                        jin_load_test_styles();
                }
        });
}

// ------------------------------------
// 3)「設定画面」表示関数の具体的内容(関数A)
// ------------------------------------
function jin_test_setting_func(){


//以下省略

?>
Jin Simple Code Block

この修正では、
以下3つの手順でCSSファイルを読み込みます。

  • 手順1)CSSファイルを「ワードプレスに登録」(4-12行目)
    (読み込みたいCSSファイルをワードプレスに認識してもらう)
  • 手順2)登録したCSSの「読み込み関数を用意」(16行目~18行目)
    (1で登録したCSSの読み込みのための関数を作る)
  • 手順3)設定ページで「実際にCSSの読み込み」(39行目と44行目)
    (設定ページにおいて、2で用意したCSSの読み込み関数を呼び出す)
手順1)ワードプレスに登録
Code
// ★ 手順1:CSSファイルを「ワードプレスに登録」
function jin_register_test_styles() {
    wp_register_style( 
        'jin_func1_style', 
        get_theme_file_uri( 'myfunc/func1-style.css' ), 
        array(), 
        filemtime( get_theme_file_path( 'myfunc/func1-style.css' ) ) 
    );
}
add_action( 'admin_enqueue_scripts', 'jin_register_test_styles' );
Jin Simple Code Block

ワードプレスにCSSファイル(スタイルシート)を登録します。(認識してもらう)

登録には wp_register_style関数を使い、以下の形で記述。

  • wp_register_style( '登録名' , 'CSSファイルのURL' , '依存関係' , 'バージョン' )
  • 登録名: 他と重ならない任意の名前を付けます。
  • URL: get_theme_file_uri() で取得します。
  • バージョン: filemtime() を使うことで、CSSファイルを更新した瞬間にブラウザへ変更が反映されるようになります(キャッシュ対策)

これをスタイルシートを追加するときに使う「admin_enqueue_scripts」フックを使って呼び出します(12行目)

手順2)読み込み関数の用意
Code
// ★ 手順2:登録したCSSの「読み込み関数を用意」
function jin_load_test_styles() {
    wp_enqueue_style( 'jin_func1_style' );
}
Jin Simple Code Block

CSSファイルを実際に読み込むためにはwp_enqueue_style()を使い、
手順1で決めた登録名を指定。(これにより、登録したCSSファイルが読み込まれる)

これを設定ページが表示されるときに呼び出せばよいってことになりますが、
それを次の手順3で行います。

ちなみにwp_enqueue_style()が実行されると、ページ表示時にページのHTML(bodyタグ前のヘッダ部分)に以下が追加され、実際にCSSが読み込まれます。

  • <link rel='stylesheet' href='http://example.com/xxxx/myfunc/func1-style.css'>
手順3)実際にCSSの読み込み
Code
function jin_test(){
        $page_hook = add_options_page(
                'JIN Test Settings',
                'JINテスト用設定',
                'manage_options',
                'jin-test-setting-slug',
                'jin_test_setting_func'
        );
 
        // ★ 手順3:設定ページで「実際にCSSの読み込み」
        // 管理画面のスクリプト読み込み時に実行
        add_action( 'admin_enqueue_scripts', function( $current_hook ) use ( $page_hook ) {
                // この設定画面の時だけ、手順2の関数を呼び出す
                if ( $current_hook === $page_hook ) {
                        jin_load_test_styles();
                }
        });
}
Jin Simple Code Block

手順2で用意した「関数(jin_load_test_styles())」を、「自分の設定ページが開かれた時だけ」動作するように指定します。

  • ページIDの取得:
    add_options_page() の戻り値を変数 $page_hook に保存します。ここには、その設定画面専用の「識別ID」が入ります。
  • ページ判定: admin_enqueue_scripts フックの中で、「今表示しているページのID($current_hook)」と「自分の設定画面のID($page_hook)」を比較します。
  • 実行: IDが一致したとき、つまり自分の設定画面が表示された瞬間だけ、手順2の関数を実行してCSSを読み込みます。

このように判定を入れることで、他の管理画面(投稿一覧やプラグイン画面など)に無関係なCSSが読み込まれるのを防ぎ、動作を軽く保つことができます

手順1から手順3の、より詳しい具体的な説明は以下参照してみてください。

では今回は以上!
うまくCSS反映されましたか?^-^)

⇒「Settings APIの使い方まとめ」に戻る

またネットビジネスに興味がある、とか、ブログで収益化をしてみたい、という場合には、以下のメルマガにも登録してみてくださいね。

早期退職して海外で奮闘する JIN のメールマガジン

時間や場所に縛られず稼いだJINが教える

~ 最短で月収10万円稼げるようになる方法 ~

お名前/ニックネーム

隣のあの人にも、思わず教えたくなる秘密

配信停止は、いつでもできます

迷惑メールは一切配信されませんので、ご安心くださいね

自らの手で未来を変える力を手に入れる!

コメント