MENU

WordPressでURL(パス)を取得する場合はget_template_directory_uriよりget_theme_file_uriが便利

WordPressでパスを取得する際、get_template_directory_uriあるいはget_stylesheet_directory_uriを使用するのは従来の方法でした。

しかしWordPress4.7からget_theme_file_uriget_theme_file_pathという関数が追加されました。この関数は従来のget_template_directory_uriget_stylesheet_directory_uriと同様のパスを取得する機能に加え、より痒い所に手が届く関数になっています。

get_theme_file_uri の機能

冒頭でも触れた通り、get_theme_file_uriはテーマのパスを取得する関数で、これは従来のget_template_directory_uriget_stylesheet_directory_uriと同じです。ちなみにget_template_directory_uriget_stylesheet_directory_uriの違いは親テーマのパスを取得するかと子テーマのパスを取得するかです。

  • get_template_directory_uri→ 親テーマのパスを取得
  • get_stylesheet_directory_uri→ 子テーマのパスを取得

このように従来の方法ではパスの取得という同じ目的でも親テーマか子テーマかで関数を使い分ける必要がありました

get_theme_file_uri は親テーマと子テーマで使い分けの必要がない

一方、親テーマでget_theme_file_uriを使ってファイルを読み込んでいる場合、同名のファイルが子テーマに存在すると、自動的にオーバーライドする機能を持っています

子テーマで親テーマと同名のphpファイルを作成すると、子テーマを優先して読み込むのと同じです。これがcss・jsファイルやURL、画像などでも適用されるようになります。なので子テーマで特に読み込む記述をする必要がなく、同名のファイルを作成するだけでOKです。よりシンプルにテーマ作成ができるようになります。

さらには子テーマで指定したファイルで親テーマに同名ファイルがない場合は、そのまま子テーマのファイルが読み込まれるので、get_template_directory_uriの代替としてWordPress4.7以降はget_theme_file_uriを使用すれば良いことになります。

get_theme_file_uri の使い方

get_theme_file_uri( $file )のように引数にテーマ直下以降のパスを指定して使用します。従来のパスの取得方法も参考として記載します。

// 例:cssの読み込み(WordPress4.7以前の方法)
wp_enqueue_style( 'glatch-styles', get_template_directory_uri() . '/assets/css/style.css' ), false );

// 例:cssの読み込み(WordPress4.7以降の方法)
wp_enqueue_style( 'glatch-styles', get_theme_file_uri( '/assets/css/style.css' ), false );

// 例:jsの読み込み(WordPress4.7以前の方法)
wp_enqueue_script( 'glatch-scripts', get_template_directory_uri() . '/assets/js/bundle.js' ), false );

// 例:jsの読み込み
wp_enqueue_script( 'glatch-scripts', get_theme_file_uri( '/assets/js/bundle.js' ), array(), false, true ); 
// 例:画像ファイルの読み込み
<img src="<?php echo get_template_directory_uri(); ?>/assets/img/logo.png">

// 例:画像ファイルの読み込み
<img src="<?php echo get_theme_file_uri( '/assets/img/logo.png' ); ?>">

子テーマから親テーマのファイルを取得したい場合

子テーマから親テーマのファイルを取得したい場合は、get_parent_theme_file_uri関数が同じくWordPress4.7で追加されましたので、こちらを使用します。

絶対パスで取得したい場合はget_theme_file_path

絶対パスで取得したい場合はget_theme_file_pathを使用します。こちらもget_theme_file_uriと同じように子テーマでオーバーライドしてくれるようになります。

おわりに

get_theme_file_uriは不特定多数向けにテーマ開発している開発者にとっては既に必須となっている関数です。get_theme_file_uriを使っていると子テーマがぐんと開発しやすくなります。

もちろんクライアントワーク向けにもあえてget_template_directory_uriを使う場面というのが想定できません(そういうケースがあればぜひ教えてください)ので、開発をしやすくするためにも積極的に使っていきたい関数です。