WordPressで任意のページ(階層)とその下層ページのテンプレートを振り分ける為の分岐処理
2020.11.26任意のページだけテンプレートを変えたい、もしくは任意のページとその下層すべてのテンプレートのデザインを変えたいといった時に便利な処理をご紹介します。
よくあるパターンとしてhttps://www.〇〇〇〇.com/en/ みたいな感じで「en」というページを筆頭に下の階層に英語ページが展開されているとき、英語ページのみテンプレートや言語を変えたいといった処理が必要になります。
もし、/en/以下を日本語ページと別のWordPressを設置して作成している場合はそれぞれテンプレートを作るなりして対応しますが、同じWordPressで作成する場合は英語ページ以下でテンプレートを変えるための分岐処理が必要となります。
ということでfunctions.phpに任意のページもしくは任意のページの下層ページ(固定ページ)なのかを判定する関数を自作します。
/*-----------------------------------
日本語、英語ページ判定用
-----------------------------------*/
function is_english_page() {
//任意のページかどうか
if( is_page( 50 ) ) {
return true;
} else {
//任意のページの下層かどうか
if ( in_array( 50, get_post_ancestors( $post->ID ) ) ) {
return true;
} else {
return false;
}
}
}
はい、上記のソースは任意のページ(en)のIDが50の場合の処理になってます。
では解説していきます。
//任意のページかどうか
if( is_page( 50 ) ) {
return true;
} else {
//任意のページの下層かどうか
if ( in_array( 50, get_post_ancestors( $post->ID ) ) ) {
return true;
} else {
return false;
}
}
まず、任意のページであるかどうかの判定を行っております。任意のページであるならばそのままtrueを返しています。もし任意のページ以外であればさらに判定処理が行われます。
//任意のページの下層かどうか
if ( in_array( 50, get_post_ancestors( $post->ID ) ) ) {
return true;
} else {
return false;
}
//in_array( 任意の値, 配列 )
ここが自作した関数is_english_page()の最大のポイントです。
in_array()は値が配列に存在するかどうかを判定します。また、get_post_ancestors( $post->ID ) はそのページの親や祖先すべてのIDを取得して配列で保持します。つまり親や祖先全てのIDを取得した後にその配列に任意のIDが含まれているかを判定しています。ここでは親や祖先にID50が存在しるかどうかを判定しているわけです。
if( is_english_page() ) {
//英語のテンプレートの表記
} else {
//日本語(通常)のテンプレートの表記
}
functions.phpに関数を設置しましたので、各テンプレートで上記の様に使用することができます。
もし、こんな方法もあるよ~とかこっちの方が便利だよ~といった感想などあれば気軽に絡んでいただければ幸いです。