ウェブサイトのソースに出力する内容をPHPの関数で切替えたいというお話です。
PHPの関数を使って、WordPressの関数で取得した値を判定して処理を切替えます。
PHP
「変数に何もなかったら」
の違い
このサイトではないのですが。
すでに存在するサイトでは、過去にいろいろと場当たり的な設定があるものですよね。困ります。
どういった設定になっているのか紐解く方が大変なので、見えている状態に合わせて、場当たり的な設定を施すのでした。。いいのかな。。
いくつかの値を確認して、優先順に沿って値を出力します。
descriptionを出力したいだけなのに
SEO対策ということで、descriptionを出力したいということなのですが。
すでにいくつかのカスタム投稿タイプが存在し、それぞれでカスタムフィールドや抜粋の使い方がバラバラで、長い物に巻かれることになりました。
カスタムフィールドがあれば、その内容をdescriptionにします。
カスタムフィールドがなければ、抜粋から取得することにして、抜粋に何もなければ、本文の冒頭部分を取得してこようというわけです。
言うは易し。
カスタム投稿タイプごとに事情が異なり、例外処理もけっこうあるのでした。
ロジックを整理するだけでもまあまあな時間を要しました。。(愚痴ですね。。)
カスタムフィールドと抜粋を確認したい
いろいろなパターンがありましたが、おおむねのところで。
カスタムフィールドの存在確認は、返り値がNULLかどうかで判定する方法にしました。(もともとあったロジックを活用したということでもあります。)
存在確認とは別に、値が入っているかどうかの確認も必要なわけです。
おおむね、以下のようなことになりました。
$custom_fields = get_post_custom();
if is_null( $custom_fields ) {
// カスタムフィールドが設定されていない場合の処理
$description = (略)
} else {
// カスタムフィールドがある場合の処理
$description = (略)
}
if empty( $description ) {
// 取得した値が空っぽの場合の処理
$description = (略)
}
get_post_custom()
は、カスタムフィールドが設定されていないとNULLを返します。(今回はカスタムフィールドが設定されている = description がある というロジックが成立したのでコードがシンプルでした。)
ただし、取得した値に対してはさらなる確認を入れました。
たとえば、抜粋を取得(get_the_excerpt()
)した場合、抜粋に1文字も書かれていなければ、NULLではなく空っぽが返ってきます。この判定が今回のキモです。
PHPの関数を利用して判定しています。
似たようなものが3つあるようで、それぞれで結果が異なるので、仕様を確認して使いました。
種類 | 未宣言 | NULL | ” | 0 | ‘hoge’ | array() | array(‘a’) |
---|---|---|---|---|---|---|---|
is_null | FALSE | TRUE | FALSE | FALSE | FALSE | FALSE | FALSE |
empty | TRUE | TRUE | TRUE | TRUE | FALSE | TRUE | FALSE |
isset | FALSE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE |
PHPのお勉強が進んでいきます。
こうやって賢くなっていくのですね。
どんどん上を目指しましょう。
is_null
対象がNULLかどうかを判定します。
NULLは何もない状態であって、空文字とは異なります。
配列は判定できません。
変数が宣言されていなければ判定できないのでFALSEです。
empty
対象が存在しないことを判定します。
以下のときにTRUEになります。
- 存在していない
- NULL
- 空文字
- 0
配列も対象です。
「存在していない」とは、変数が宣言されていない場合もしくはunset
された場合です。
isset
変数が宣言されていてNULLではないことを判定します。
結果として、is_null
の反対になるということです。
参考: 公式マニュアル
公式マニュアルは見ておきましょう。
ご意見やご感想などお聞かせください! コメント機能です。