[php]絶対パスと相対パスを判別して条件分岐する

wordpressのカスタムフィールドで地味に役立つはず。

どういうことか

WordPressを前提として。

例えばバナー群やらスライドやら、カスタムフィールドでページ内に設置するリンクを管理するとして、リンク先として登録するURLの入力方法は「http~で書き始める」か、「ドメイン以降の部分だけ書く」かの2種類ある。

WPがドメイン直下にあるならどっちでも問題ないんだけど、WPのインストール先がドメイン以降にディレクトリを噛ませた構成だった場合、後者を採用するとディレクトリをすっ飛ばして、ドメイン直下に追記する形になる。リンクが壊れる。

こんな感じ。

<a href="/test/">link</a>

WP:https://blog.megefeps.info/
リンク先:https://blog.megefeps.info/test/

WP:https://blog.megefeps.info/aaaa/
リンク先:https://blog.megefeps.info/test/

HTMLの仕様がわかってたら何もおかしくないことだけど、これにより発生する不具合は想像に難くないと思います。

これに対応します。

やっていく

カスタムフィールドはSmartCustomFieldsで管理したとする。

<?php
$url = SCF::get('url');
if(false === strpos($url, 'http')){
    $url = esc_url( home_url($url));
}
echo $url;
?>

SSLの有無のことがあるので文字列に「http」が含まれるか否かで条件分岐する。含まれてなければ相対パスだろうということで、home_url()に放り込んでWPのURLに対応した絶対パスに変換する。含まれていたら加工する必要はないのでそのまま書き出す。

まとめ

運用を考えたらフルパスで登録することが当たり前になりそうだけど、ドメインの載せ替えを考えたら相対パスで入れたい気持ちもある。まあ運用中にドメインが変わることなんて無いだろうけど。

テスト環境でもリンク切れしない、そのまま移行できるメリットがあるんで、無駄というわけではない。

そんな感じで。

コメント

タイトルとURLをコピーしました