WordPressで処理を強制終了させたり、オリジナルのエラーを表示させる方法
we_dieの使い方
PHPのdie関数で処理を強制終了することができる。
dieのWordPress版がwp_die関数で、
wp_die();
とすることで強制終了となる。具体例として、スパムコメントが投稿されそうになった場合に強制終了にしてみる。
function not_spam_comment( $comment_post_ID ) { // spamの判定処理 if( $spam ) { wp_die( "SPAM !" ); } } add_action( 'pre_comment_on_post', 'not_spam_comment' );
wp_dieの引数としてエラーメッセージを渡すことで、画面にそのメッセージを表示した上で強制終了とすることが出来る。その際、標準ではHTTP500を返して強制終了となる。HTTPステータスコードを引数として追加することで、403エラーとして終了することが可能。
wp_die("SPAM !", "add title", array('response' => 403, 'back_link' => true));
3番目の引数に配列でresponseを指定することができ、上のコードのように指定すると、403 Forbiddenとして強制終了となる。また、titleタグの設定や戻るのリンクなどを設置することが可能。
WP_Errorとの連携
wp_dieで強制終了をカスタマイズすることが出来るのだが、WordPressのWP_Errorオブジェクトと連動させることで、
エラーの発生から強制終了まで
を開発者が自由に設定できるようになる。具体的にはプラグイン開発でオリジナルのエラーオブジェクトを設定しておいて、任意のタイミングで、wp_dieに引数としてWP_Errorを渡すことでエラーと終了を制御する。
$return = new WP_Error(); $return->add( '403', 'Forbidden', array( 'title' => 'Forbidden Title' ) );
上のコードはエラーオブジェクトの作成を行い、403というオリジナルのエラーを一つ追加したコードになる。
wp_die($return);
wp_dieにエラーオブジェクトである$returnを渡すだけで、自動でエラーメッセージとtitleタグを設定することが出来る。
wp_die($return, null, array('response' => 403, 'back_link' => true));
3番目の引数としてresponseを追加する場合は、上のように2番目の引数にnullを設定しておけば、WP_Errorで定義したtitleが自動的に設定される。また、response codeも設定することが出来る。
wp_dieだけでなくWP_Errorもセットで調べてみるのが効率的でおすすめ。
参考
wp_die codex