カテゴリー
WordPressカスタマイズ

WordPressでファイルの有無を判定する!

WordPressでファイルの存在によって条件分岐はできるでしょうか?
イエス!ファイルの有無はWordPressではなく、PHPのfile_exists()関数で判定できます。
例えばこんな具合です。

<?php
if (file_exists('sample.php'){
  echo 'ファイルはあります';
} else {
  echo 'ファイルはありません';
}
?>

WordPressルートにsample.phpが存在する場合、テーマのheader.phpなどで実行すると、条件分岐できます。
もちろん、file_exists()はフォルダでも存在チェックは可能です。
そして、以下のようにファイル名を変数とすることもできます。

<?php
$filename = get_template_directory().'/sample.php';
if (file_exists($filename)) {
  echo 'ファイルはあります';
} else {
  echo 'ファイルはありません';
}
?>

ここではWordPressに特化した形として、テーマ内のファイルを指定しています。
このfile_exists()はファイルシステム上のパスでファイルの存在を調べます。
テーマ内のファイルを調べるためにWordPress側の関数を使っていますが、URLを返すget_template_directory_uri()でなく、ファイルシステム上でのパスを取得するget_template_directory()を使うことに留意ください。

ケーススタディ

例として、子テーマを使用している場合に親子どちらのフォルダからファイルを読み込むかをファイルの存在によって条件分岐してみます。

<?php
$filename = get_stylesheet_directory().'/sample.php';
if (file_exists($filename)) {
  include get_stylesheet_directory().'/sample.php';
} else {
  include get_template_directory().'/sample.php';
}
?>

通常、WordPressでPHPファイルをテンプレートとして読み込む場合はget_template_part()を使います。
このとき、子テーマで実行しても親テーマのファイルを読み込みます。
これはinclude get_template_directory()としても、同じ挙動となります。

対して、include get_stylesheet_directory()では、アクティブなテーマ、子テーマを使用していれば、そちらのテーマフォルダを参照します。
ただし、子テーマ側にファイルが存在しない場合はWarningが生じます。
そこで、子テーマ側ファイルの存在をfile_exists()で確認して、処理を分けています。

補足

get_template_directory_uri()get_template_directory()の違いについて少し補足しておきます。
前者はURL、後者はシステムのファイルパスを返すと解説しましたが、それぞれが実際に取得するパスは下記のようになります。

get_template_directory_uri()
https://example.com/wp-content/themes/enoughone-mu/
get_template_directory()
/home/example.com/public_html/wp-content/themes/enoughone-mu/

get_stylesheet_directory_uri()get_stylesheet_directory()の挙動も同様です。

profile image

執筆:R3098

WEBサービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などのプラグイン開発も行っています。サイト運営者の力になりたいと考えます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。