前提条件
WordPress テーマ開発のほとんどは、ほぼプラグアンドプレイです。必要なのは、コードエディタと、ツールとセットアップに記載されている開発環境にインストールされた WordPress です。しかし、ビルドプロセスで作業するには、いくつかの他の要件があります:
- ローカルマシンに Node.js と npm をインストールする必要があります。
- 基本的な webpack の理解も強く推奨されます。
@wordpress/scripts
パッケージに対するある程度の親しみ(ブロックエディタハンドブックの wp-scripts の始め方を読むことをお勧めします)。
これらは通常のテーマ構築に必要なツールよりも高度なものですが、標準の WordPress ビルドプロセスで作業したい場合は必要です。
ファイルとフォルダの設定
@wordpress/scripts
パッケージは元々ブロック開発のために作成されましたが、時間とともにテーマでも機能するように進化しました。デフォルトでは、開発ファイルが /src
フォルダに存在し、ビルドファイルが /build
フォルダに出力されることを期待しています。ほとんどのテーマ作成者はアセットを扱うためにカスタムシステムを利用しているため、このガイドではその方法を示します。
以下の例では、テーマフォルダ内でこの構造を使用します:
WordPress スクリプトパッケージのインストール
ファイルとフォルダの設定が完了したら、ローカルマシンに正しいパッケージをインストールする必要があります。
まず、テーマの package.json
ファイルを開き、次のコードを追加します:
{
"name": "your-project-name",
"scripts": {
"start": "wp-scripts start --webpack-src-dir=resources --output-path=public",
"build": "wp-scripts build --webpack-src-dir=resources --output-path=public"
}
}
@wordpress/scripts
パッケージには、追加できるいくつかの 利用可能なスクリプト がありますが、start
と build
は確実に必要です。
次に、コンピュータのコマンドラインツールを開き、テーマフォルダに移動して、次のコマンドを入力します:
npm install @wordpress/scripts path webpack-remove-empty-scripts --save-dev
そのコマンドは、3つのパッケージをインストールします:
@wordpress/scripts
path
webpack-remove-empty-scripts
後者の2つはサードパーティのパッケージですが、次のステップで webpack と統合するのに役立ちます。
webpack の設定
@wordpress/scripts
パッケージは webpack の上に構築されています。ブロックを構築している場合、すべてがすでに整っています。しかし、テーマを構築しているため、@wordpress/scripts
パッケージのデフォルト設定の一部を自分のものに上書きする必要があります。
それが、テーマのカスタム webpack.config.js
ファイルの出番です。設定する必要がある主なことは2つあります:
- カスタム CSS と JavaScript ファイルのエントリポイント(以下のコードにあるものは、この記事のファイル構造に対応しています)。
webpack-remove-empty-scripts
プラグインを使用して、CSS にマッピングされた残りの.js
ファイルがないようにします。
次のコードを webpack.config.js
ファイルに追加します:
// WordPress webpack config.
const defaultConfig = require( '@wordpress/scripts/config/webpack.config' );
// Plugins.
const RemoveEmptyScriptsPlugin = require( 'webpack-remove-empty-scripts' );
// Utilities.
const path = require( 'path' );
// Add any new entry points by extending the webpack config.
module.exports = {
...defaultConfig,
...{
entry: {
'js/editor': path.resolve( process.cwd(), 'resources/js', 'editor.js' ),
'css/screen': path.resolve( process.cwd(), 'resources/scss', 'screen.scss' ),
'css/editor': path.resolve( process.cwd(), 'resources/scss', 'editor.scss' ),
},
plugins: [
// Include WP's plugin config.
...defaultConfig.plugins,
// Removes the empty `.js` files generated by webpack but
// sets it after WP has generated its `*.asset.php` file.
new RemoveEmptyScriptsPlugin( {
stage: RemoveEmptyScriptsPlugin.STAGE_AFTER_PROCESS_PLUGINS
} )
]
}
};
WordPress スクリプトパッケージの使用
アセットを処理するために WordPress スクリプトパッケージを使用するには、コマンドラインツールで次の2つのコマンドのいずれかを実行できます:
start
: ファイルの開発バージョンをビルドし、「ウォッチ」モードを有効にします。これにより、変更されたコードが処理されます。build
: ファイルのプロダクションバージョンをビルドします。
次に、コマンドラインツールを開き、start
コマンドを実行します:
npm run start
これにより、/resources
フォルダからファイルが自動的に処理され、/public
フォルダに次の構造で配置されます:
- `````js/
editor.js
- `````scss/
editor.scss
editor.asset.php
screen.scss
screen.asset.php
これで、各 CSS および JavaScript ファイルに対して新しい *.asset.php
ファイルが生成されるのが見えるでしょう。これらには、ファイルを読み込む際に使用できる各アセットファイルに関するメタデータが含まれています。これは、以下の「スクリプトとスタイルの読み込み」セクションで説明されています。
start
コマンドを無効にするには、コマンドラインツールで Ctrl + C
を入力します(Windows または Mac のいずれか)。
ファイルの最終的なプロダクションビルドを行う準備ができたら、コマンドラインツールで次のコマンドを実行します:
npm run build
スクリプトとスタイルの読み込み
スクリプトとスタイルの読み込み方法は、このハンドブックの アセットの含め方 ドキュメントで詳しく説明されています。次のステップに進む前に、これを行う方法にすでに慣れているべきです。
以下のドキュメントは、*.asset.php
ファイルが各アセットのためにどのように生成されるかを教えることを主に目的としています。各ファイルには、次のスニペットに似た配列が表示されます:
<?php return array('dependencies' => array('wp-block-editor'), 'version' => '2eae4c519afeff2a8c77');
特に、配列には、任意の wp_enqueue_*()
関数で使用できる2つのメタデータが含まれています:
dependencies
: スクリプト/スタイルが依存している依存関係の配列。version
: キャッシュバスティングに使用できるバージョン番号。
ファイルが配列を返すため、PHP の include
を使用して、配列をコード内の変数に割り当てることができます。以下の例は、screen.asset.php
ファイルの配列を取得する方法を示しています:
$asset = include get_theme_file_path( 'public/css/screen.asset.php' );
// Returns: array( 'dependencies' => array(), 'version' => '0000' );
wp_enqueue_script()
または wp_enqueue_style()
を使用してスクリプトまたはスタイルを読み込む際には、$asset['dependencies']
と $asset['version']
を関数の対応するパラメータに渡すことができます。
次のコードをテーマの functions.php
ファイルに追加して、以前に定義したアセットを読み込んでみてください:
// Load front-end assets.
add_action( 'wp_enqueue_scripts', 'themeslug_assets' );
function themeslug_assets() {
$asset = include get_theme_file_path( 'public/css/screen.asset.php' );
wp_enqueue_style(
'themeslug-style',
get_theme_file_uri( 'public/css/screen.css' ),
$asset['dependencies'],
$asset['version']
);
}
// Load editor stylesheets.
add_action( 'after_setup_theme', 'themeslug_editor_styles' );
function themeslug_editor_styles() {
add_editor_style( [
get_theme_file_uri( 'public/css/screen.css' )
] );
}
// Load editor scripts.
add_action( 'enqueue_block_editor_assets', 'themeslug_editor_assets' );
function themeslug_editor_assets() {
$script_asset = include get_theme_file_path( 'public/js/editor.asset.php' );
$style_asset = include get_theme_file_path( 'public/css/editor.asset.php' );
wp_enqueue_script(
'themeslug-editor',
get_theme_file_uri( 'public/js/editor.js' ),
$script_asset['dependencies'],
$script_asset['version'],
true
);
wp_enqueue_style(
'themeslug-editor',
get_theme_file_uri( 'public/css/editor.css' ),
$style_asset['dependencies'],
$style_asset['version']
);
}