公式テーマなど、配布用のテーマを作成する場合 wp_nav_menu() といった関数では、カスタムメニューが存在しない場合に、フォールバック関数が動作します。
通常、テーマユニットテストで、表示が適切かどうかを検査するわけですが、
検査用 インポートファイル
この記事は、ユニットテストの検査漏れを防ぐ工夫に関するメモです。
検査時に、カスタムメニューが、作成されていれば、それだけで検査されることになりますし、
カスタムメニューが作成されていなければ、その環境のみで検査されることになりがちで、
このような、検査用のデータだけでは、フォールバック関数が使用されたときの挙動のチェックが抜け落ちてしまう事があります。
( もちろんテーマで、フォールバック関数を働かなくすることも可能ではありますが、、、)
この問題は、私自身が実際に体験した 恥 でもあるわけですが
Unit Test中に、カスタムメニューをすべて削除して、再テストしてもいいのですが、効率が悪く 一つのユニットテストの中でメニューを切り替えてテストできれば、より簡単に、確実にテストを完了することが出来ます。
そのため、チョットしたコードの工夫をしました。
あくまで、テストの効率のために作ったものなので、デフォルトでバンドルされている hello dolly プラグインに、ちょっとコードを追加します。
以下は、Raindropsテーマ用に作成した。ページメニューに切り替える なんちゃってスクリプトです。
add_action( 'init', 'my_plugins_setup' ); function my_plugins_setup() { add_filter( 'wp_nav_menu', 'custom_wp_nav_menu' ); add_action( 'template_redirect', 'custom_wp_nav_menu_config' ); } function custom_wp_nav_menu( $html ) { global $raindrops_enable_keyboard; //フィルタで、ページメニューを表示させます if ( is_single( 30400 ) ) { //var_dump( $raindrops_enable_keyboard ); return wp_page_menu( array( 'echo'=> false ) ); } return $html; } function custom_wp_nav_menu_config() { global $raindrops_enable_keyboard; //設定の変更などが必要な場合、ここに記述します。 if ( is_single( 30400 ) ) { $raindrops_enable_keyboard= false; } }
誰でもが平易に使える よいテーマを目指そうとすると、自分の作成するテーマに即した ユニットテストが必要になると思います。
誰かのヒントになる事を期待して、メモに残します。