tips

wordpress の get_post_metaの分岐はエルビス演算子を活用すると良いかもしれない

三項演算子省略形の活用について

何を今更みたいな話題です。

PHP5.3以降、三項演算子は真ん中を省略できるエルビス演算子というものが使えるようになったわけですが、使えないような環境もままあったりもしたのですが、そんなお仕事はお断りするとして、そろそろいいだろうと言うことで、今後は意識して使ってみることにする。プラグイン化したりすると、いろんな環境で動かないと具合が悪いんで、どうしてもレガシー対応になるのですが、技術や考え方もレガシー化する今日この頃・・・。

三項演算子をすぐに気がついたのは、wordpress 案件で使う機会が多いと言うこと。特に、get_post_metaでカスタムフィールドを呼び出す場合、条件分岐で、いくつかの値をを比較して付与するってのはよくあるケースだと思う。

 

if ( get_post_meta( $post_id, 'metakey_1', true ) ){
  $metavalue = get_post_meta( $post_id, 'metakey_1', true );
} else {
  $metavalue = get_post_meta( $post_id, 'metakey_2', true );
}

↑時々見るこんな手順ですが、metakey_1を二度呼び出しているので、よろしくない。

 

$metavalue = get_post_meta( $post_id, 'metakey_1', true );
if ( !$metavalue ){
  $metavalue = get_post_meta( $post_id, 'metakey_2', true );
}

処理的に問題ないし、可読性も良いのでこれで良いと思ってそうしてきたわけですが、ただ、値を渡したいだけならこれでも間怠っこしく感じる時もある。

 

$metavalue = get_post_meta( $post_id, 'metakey_1', true ) ?: get_post_meta( $post_id, 'metakey_2', true );

wordpress の get_post_meta 関数の場合、isset などで事前に検査する必要がないのでスッキリできるわけですね。
ちなみに、Null 合体演算子(??)というのもあって、php 7.0から使えるのでこちらもそろそろ解禁ですね。

$value = isset( $_POST['key'] ) ? $_POST['key'] : '';

これが以下のように書いてもUndefined index が発生しないという優れものです。修繕してるプラグインは全部書き換えたい。。。

$value = $_POST['key'] ?? '';