ファイルが存在するかを確認する方法

PHPでファイルが存在するかを確認する場合は、下記の様に実装しますが、これをWordpressで動作させるためには、少し改造を施す必要があります。 WPでの実装方法 WordPressの場合は、テーマ内のファイルを指定す […]

PHPでファイルが存在するかを確認する場合は、下記の様に実装しますが、これをWordpressで動作させるためには、少し改造を施す必要があります。

<?php
if (file_exists('sample.png')) {
  echo '存在する';
} else {
  echo '存在しない';
}

WPでの実装方法

WordPressの場合は、テーマ内のファイルを指定する必要があるため、テーマへのパスを取得してから判定を行う必要があります。その際に注意が必要なのが、URIではなく、ファイルシステム上でのパスを取得するget_template_directory()を使う必要があるという事です。実際のスクリプトは下記の様になります。

<?php
$file = get_template_directory() . '/img/sample.jpg';
if ( file_exists( $filename ) ) {
  echo '存在する';
} else {
  echo '存在しない';
}

活用例:カテゴリ別にデフォルトのサムネイルを表示する

私はこのスクリプトを投稿のサムネイル表示に使用しています。カテゴリ別にデフォルトのサムネイルを予め用意しておき、カテゴリスラッグから画像のファイル名を生成し、画像ファイルが存在する場合は、その画像へのURIを、存在しない場合はデフォルト画像へのURIを返します。もちろん、投稿にサムネイルが表示されている場合は、そのサムネイルを使用します。下記がそのスクリプトです。

<?php
function GetThumbUri(): string {
    if ( has_post_thumbnail() ) {
        $id   = get_post_thumbnail_id();
        $imgs = wp_get_attachment_image_src( $id, 'large' );
        $img  = $imgs[0];
    } else {
        $cate_name  = GetCategorySlug();
        $file_uri   = get_template_directory();
        $img        = $file_uri . "/assets/img/thumb_{$cate_name}.png";
        if ( file_exists( $img ) ) {
            $img = GetAssetsUri( "img/thumb_{$cate_name}.png" );
        } else {
            $img = GetAssetsUri( "img/thumb_mmm.png" );
        }
    }
    return $img;
}

GetCategorySlug()は投稿に登録されている、最初のカテゴリのスラッグを取得する関数です。
GetAssetsUri()はアセットフォルダへのURIを付与してくれる関数です。