お疲れさまです。
あっという間に8月も終わります。
今月もお疲れ様でした★
そして、今年も残すところあと4ヶ月。
弊社はEC関連のお仕事が多いのでこの辺りから年末商戦に向けた企画の準備など、いろいろと慌しくなっていきます。
そんなみなさんに向けた内容ではないので恐縮ですが、きっとどこかで困っているだろうアナタに向けた今回の内容です。
例えば・・・
・何らかの原因で画像リンクのパスが変わってしまった。
・クライアント様が不慣れで画像パスがうまく設定できなかった。
・画像パスが自動で出力されるようなコードを書いているけどうっかり画像の設定をしておらずリンク切れ。
※今回はワードプレスなのでアイキャッチ画像のあるなしとかですかね。
こんなところを回避しましょう。
画像URLが存在するか
では、まずは画像URLが存在するか確認しないとですね。
PHPを使うので 普段は file_get_contents を良く使いますが今回は状況別でやってみます。
ありがちな罠として
file_get_contents で画像を調べるときは、ドメインから始まる絶対パスではなく、
サーバーからのルートパスにしないといけないっていうことですね。
誤 × htttps://example.com/images/○○.jpg
正 ○ /var/www/html/ から始まるパスのことです。
誤の方で確認すると、常に存在するとなってしまうので正確なチェックをすることができません。
ルートパスを調べるには
<?php echo __FILE__ ;?>
というPHPファイルを作っておいて階層を調べたいフォルダにいれ、ファイルにアクセスしてみましょう。
PHPが使える環境ならいつでも使えるので、1つ持っておくと便利です。
では上記を踏まえて、ワードプレスシチュエーションでやってみます。
uploadsフォルダのファイルが存在するか
自動でアップロードしたファイルを uploadsフォルダに格納されるようにしていることがほとんどだと思いますが
そこにあるはずのファイルを念のため存在確認します。
<?php
$upload_dir = wp_upload_dir();
$upload_root_dir_path = $upload_dir["basedir"];
$upload_dir_path = $upload_dir["baseurl"];
$thumbnail_url = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
$check_thumbnail_url = str_replace($upload_dir_path,$upload_root_dir_path,$thumbnail_url);
$thumbnail_url = ( exif_imagetype($check_thumbnail_url) ) ? $thumbnail_url : get_stylesheet_directory_uri(). '/images/post_noimg.jpg';
解説すると
1: wp_upload_dir() はuploadsフォルダまでのパスを取得する関数です。
2: uploadsフォルダへのルートパスと絶対パスの方を準備しておきます。
3: 今回はアイキャッチ画像を想定しているので wp_get_attachment_url を使って画像パスを確認
4: チェックすべき画像パスを、uploadsフォルダへのルートパスと絶対パスを使ってルートパスになったURLに変換します。
$upload_dir_path・・・ドメイン/wp-content/uploads
$upload_root_dir_path ・・・ /home/○○/wp-content/uploads
▼上記を使って置換してこうする
/home/○○/wp-content/uploads/2020/03/thumb.jpg
5: 最後に画像が存在するかどうかで、デフォルト画像を使うかどうか判断。
これを、アーカイブなどのループ処理に入れておけばばっちりですね。
需要はきっとあるはず・・・
実際、僕が遭遇したのできっと役に立つはず・・・・
最近は、顔出しさせてませんがどんきちも元気です。
もう治ったんじゃないかと思うほど・・・粘着質です。
元気になってくれてなにより。
では、今年も残り4ヶ月、頑張っていきましょう!