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'] ?? '';