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を付与してくれる関数です。