参考
wp_enqueue_styleによる実践的なスタイルシート読み込み
wp_enqueue_styleを使った実践的なWordPressスタイルシート管理方法を解説。style.cssとは別のファイルでスタイルを管理し、複数のスタイルシートを効率的に読み込む方法を学習します。依存関係の設定による読み込み順序制御、自動バージョン更新など、プロの開発現場で使われる実践的な技術を詳しく説明します。
前回、SNS情報を管理画面で一元管理し、ヘッダーに表示する機能を実装しました。しかし、SNSアイコンは文字化けしたまま表示されていません。
今回は、WordPressでのCSS読み込みの正しい方法を学び、Font AwesomeのCSSを読み込んでヘッダー全体のスタイリングを完成させます。
目次
WordPressでCSSを読み込む際は、wp_enqueue_style()関数を使います。
<link>タグを直接header.phpに書くこともできますが、wp_enqueue_style()を使うことで以下のメリットがあります。
functions-theme-init.phpと同様に、CSS/JSの読み込み処理も別ファイルに分けて管理します。
functions-theme-load.phpを作成しましょう。
まず、functions.phpに読み込み用ファイルを追加します。
<?php
// 初期設定
require_once 'functions-theme-init.php';
// js/css読み込み
require_once 'functions-theme-load.php';PHP新しくfunctions-theme-load.phpを作成し、以下のコードを記述します。
<?php
/**
* CSS読み込み
*/
add_action('wp_enqueue_scripts', function() {
// fontawesome
wp_enqueue_style(
'fontawesome',
'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@7.1.0/css/all.min.css',
array(),
'7.1.0',
'all'
);
// main
$target_file = '/main.css';
wp_enqueue_style(
'theme-main',
get_stylesheet_directory_uri() . $target_file,
array('fontawesome'),
filemtime(get_stylesheet_directory() . $target_file),
'all'
);
});PHPadd_action('wp_enqueue_scripts', function() {
}PHPwp_enqueue_scriptsは、WordPressがフロントエンドでCSS/JavaScriptを読み込むタイミングで実行されるアクションフックです。
wp_enqueue_style( $handle, $src, $deps, $ver, $media );PHP$handle: CSS識別用のユニークな名前$src: CSSファイルのURL$deps: 依存するCSSの配列(このCSSより先に読み込むべきCSS)$ver: バージョン番号(キャッシュ対策)$media: メディアタイプ(デフォルトは’all’)// fontawesome
wp_enqueue_style(
'fontawesome',
'https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@7.1.0/css/all.min.css',
array(),
'7.1.0',
'all'
);PHParray()が空)CDN(Content Delivery Network)は、ファイルを高速に配信するための仕組みです。
Font Awesomeのような広く使われるライブラリをCDNから読み込むことで、以下のメリットがあります。
今回はjsDelivrというCDNサービスを利用しています。
$target_file = '/main.css';
wp_enqueue_style(
'theme-main',
get_stylesheet_directory_uri() . $target_file,
array('fontawesome'),
filemtime(get_stylesheet_directory() . $target_file),
'all'
);PHPポイント
get_stylesheet_directory_uri(): テーマディレクトリのURLを取得array('fontawesome')により、Font Awesomeの後に読み込まれることを保証filemtime(): ファイルの更新日時をバージョン番号として使用現在のヘッダーは要素が並んでいるだけで、レイアウトが整っていません。
CSSでスタイリングしやすいように、div要素を使ってヘッダーの構造を整理します。
<header class="header">
<div class="container">
<a class="link" href="<?php echo home_url();?>">
<div class="logo"><span class="logo-the">the</span><span class="logo-name">WPCafe</span></div>
</a>
<nav class="header-nav">
<ul class="header-nav-list">
<?php
$menu_object = wp_get_nav_menu_object( 'header-navi' );
$menu_list = wp_get_nav_menu_items( $menu_object->term_id );
foreach($menu_list as $menu_item) :
?>
<li class="header-nav-item">
<a class="nav-item-link" href="<?php echo $menu_item->url;?>">
<span class="nav-item-text"><?php echo $menu_item->title;?></span>
</a>
</li>
<?php
endforeach;
?>
</ul><!-- header-nav-list -->
<ul class="header-nav-socials">
<?php
$page = get_page_by_path('config');
$page_id = $page->ID;
$sns_list = SCF::get('opt_sns_list', $page_id);
foreach($sns_list as $sns_item) :
?>
<li>
<a class="link sns-icon" href="<?php echo $sns_item['opt_sns_url']; ?>" target="_blank" rel="noopener noreferrer" title="<?php echo $sns_item['opt_sns_name']; ?>">
<?php echo $sns_item['opt_sns_icon']; ?>
</a>
</li>
<?php
endforeach;
?>
</ul><!-- header-nav-socials -->
</nav><!-- header-nav -->
</div><!-- container -->
</header>PHP整理したHTML構造にCSSを適用します。
テーマディレクトリ直下にmain.cssを作成し、以下のコードを記述します。
/* Common
------------------------------ */
* {
margin:0;
padding:0;
box-sizing: border-box;
}
a {
text-decoration: none;
}
a.link {
color: #534931;
}
.header {
width: 100%;
height: 120px;
}
.header .container {
display: flex;
align-items: center;
gap: 2rem;
padding: 0 4rem;
width: 100%;
height: 100%;
}
/* Header Logo
------------------------------ */
.header .logo {
display: flex;
align-items: center;
height: 80px;
position: relative;
color: #534931;
}
.logo .logo-the {
font-weight: 400;
font-size: 32px;
line-height: 100%;
}
.logo .logo-name {
font-size: 46px;
font-weight: 400;
padding-left: 8px;
}
/* Header Navi
------------------------------ */
.header .header-nav {
flex: 1 1 auto;
display: flex;
justify-content: space-between;
align-items: center;
}
.header .header-nav-list {
display: flex;
gap: 1.0rem;
list-style: none;
}
.header .header-nav-list .nav-item-link {
color: #534931;
}
/* Header SNS
------------------------------ */
.header .header-nav-socials {
display: flex;
gap: 1.0rem;
list-style: none;
}
header .header-nav-socials .sns-icon {
display: flex;
align-items: center;
justify-content: center;
width: 50px;
height: 50px;
border-radius: 50%;
background: #f7f7f7;
font-size: 22px;
}CSS今回は、WordPressでのCSS読み込みの正しい方法を学び、ヘッダーのスタイリングを完成させました。
学んだこと
wp_enqueue_style()を使ったCSS読み込みfilemtime()を使ったバージョン管理とキャッシュ対策重要なポイント
wp_enqueue_style()を使うwp_enqueue_scriptsアクションフック内で行う推奨される実装方法
filemtime()でファイルの更新日時をバージョン番号として使うことで、変更を確実に反映できる次回は、CSSをSCSSに移行します。
現在のmain.cssは1ファイルにすべてのスタイルを記述していますが、プロジェクトが大きくなると管理が大変になります。
次回は以下を学びます。
SCSSを使うことで、保守性の高いスタイルシートを作成できるようになります。
引き続き、実際に手を動かしながら進めていきましょう。
PRACTICE WordPressテーマ開発において、サイト全体で使用する共通情報(SNS、住所、連絡先など)を効率的に管理する方法を解説します。固定ページとカスタムフィールドを活用することで、無料で保守性の高いオプションページを実装し、簡単に情報を更新できる環境を構築します。
PRACTICE CSSをSCSSに移行し、効率的に管理できる環境を構築します。SCSSのメリットを解説し、現状のCSSをファイル分割してSCSS化します。VSCodeでの自動コンパイル環境の構築方法、出力先の設定方法を学びます。
WordPressを効率よく確実に学ぶためには、学習の順序が大切です。知識が自然に積み上がるよう、学習ステップに沿って記事を順番に並べています。
学習ストーリー第40話まで掲載中