今使っているプラグインは、設定ページで設定漏れ、エラー、リポート等をwp_dieで出力するタイプが多いので、なんとかカスタマイズできないかと調べていると・・wp_die_handlerってのがありました。
フックはわかったけど具体的にどうするかわからなかったので、フォーラムを覗いてみると書いてある書いてある・・・w
http://www.velvetblues.com/web-development-blog/custom-wordpress-comment-error-page/
なるほど、ある程度は自分でエラー処理を書かないとダメなのね。
Velvet bluesさんのコードを参考に弄ってみる。
プラグインやテーマのfunctions.phpへ以下のコードを追加。
function my_register_die_handler($func) { return "my_die_handler"; } add_filter("wp_die_handler", "my_register_die_handler"); function my_die_handler($message, $title = '', $args = array()) { $templateUser = get_theme_root()."/".get_template()."/wpdie-User.php"; $templateAdmin = get_theme_root()."/".get_template()."/wpdie-Admin.php"; if (is_admin() && file_exists($templateAdmin)) { $wp_die_data = array( "title" => $title, "message" => $message, "description" => "エラーが発生した為処理が中断されました、エラーの内容は以下の通りです。", "args" => $args ); if (empty($wp_die_data["title"])) { $wp_die_data["title"] = "エラー"; } require_once($templateAdmin); die(); } else if (file_exists($templateUser)) { $defaults = array("response" => 500); $r = wp_parse_args($args, $defaults); $wp_die_data = array( "title" => $title, "message" => $message, "description" => "エラーが発生した為処理が中断されました、エラーの内容は以下の通りです。", "args" => $args ); if (function_exists("is_wp_error") && is_wp_error($wp_die_data["message"])) { if (empty($wp_die_data["title"])) { $error_data = $wp_die_data["message"]->get_error_data(); if (is_array($error_data) && isset($error_data["title"])) { $wp_die_data["title"] = $error_data["title"]; } } $errors = $wp_die_data["message"]->get_error_messages(); switch (count($errors)) { case 0 : $wp_die_data["message"] = ""; break; case 1 : $wp_die_data["message"] = "<p>{$errors[0]}</p>"; break; default : $wp_die_data["message"] = "<ul>\n\t\t<li>" . join("</li>\n\t\t<li>", $errors) . "</li>\n\t</ul>"; break; } } if (empty($wp_die_data["title"])) { $wp_die_data["title"] = "エラー"; } if (!empty($args["description"])) { $wp_die_data["description"] = $args["description"]; } if (preg_match("/コメントを入力/u", $wp_die_data["message"])) { $wp_die_data["message"] = "コメントが入力されていません。<br/>コメントを入力後に送信してください。"; } require_once($templateUser); die(); } else { _default_wp_die_handler($message, $title, $args); } }
テンプレートファイル
ゲスト用と管理者用は内容を変えるだけでok。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" language_attributes(); > <head profile="http://gmpg.org/xfn/11"> <meta http-equiv="Content-Type" content="text/html; charset= bloginfo( 'charset' ); " /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title> echo get_bloginfo("name")." › ".$wp_die_data["title"]; </title> <link rel="shortcut icon" href=" bloginfo('home'); /favicon.ico" type="image/x-icon" /> <link rel="icon" href=" bloginfo('home'); /favicon.ico" type="image/x-icon" /> <link rel="stylesheet" href=" echo get_stylesheet_directory_uri().'/style.css'; " type="text/css" media="screen" /> </head> <body id="error-page"> <div id="container"> <div class="header"> <h1> bloginfo("name") </h1> <p class="description"> echo $wp_die_data["description"]; </p> </div> <div class="message"> <p class="text"> echo $wp_die_data["message"]."\n"; </p> </div> <div class="back"><a href="javascript:history.back();">« 戻る</a></div> </div> </body> </html>
そしてできたのがこんなページ。
ゲスト用にはテーマのstyle.cssを読み込ませているのでブログと同じスタイルで表示できます。
404.phpと同じようにget_header()、get_sidebar()、get_footer()を呼んでやるとブログのデザインと全く同じページでエラーを表示させる事もできますが、エラーページでエラーなんて事がないようにシンプルにしましたw
最近のコメント