目次
特定の親ページを持つページでだけ、出したいものがある
WordPressの改修案件にて、既存の英語ページ(/en/)の子ページとして、日本語版とほぼ同じページを作ることになりました。
日本語版のページが特殊な作りで、page-****.phpを多用している状況。
このままでは/hoge/ と /en/hoge/で、同じpage-hoge.phpが表示されてしまう!
そこで、親ページ判定を行って、テンプレート上に分岐を書くという荒業で対処しました。
親ページだけでは足りない
はじめに下記のページを参考に、親ページのslugを判定してみました。
が、/en/hoge/(親子)では動くものの、/en/hoge/fuga/(孫)まで行くと判定できず。
祖先ページを確認できるようにする
『最も上の親ページを取得する関数』を作ってくださっている方がいました。
WordPress 固定ページの最上親ページを取得する | 記事 | ShitTakaBull
WordPressで固定ページの一番上の親を取得したいときがあるかと思います。get_postなどで得られる固定ページの情報には親のIDしかなく、さらにさかのぼった情報はありませ...
上記サイトのコードと、親ページのスラッグを取得するコードを組み合わせたものが下記。
functions.php
function is_parent_slug($current_id = ''){
global $post;
if($current_id == '') $current_id ==$post->ID;
$par_id = get_post($current_id)->post_parent;
$most_par_id = $current_id;
while($par_id!= 0) :
$par_post = get_post($par_id);
$most_par_id = $par_post->ID;
$par_id = $par_post->post_parent;
endwhile;
return get_post($most_par_id)->post_name;
}
お好きなテンプレートphp
<?php if (is_parent_slug() !== 'en'): // 日本語版=============================?>
<?php else: //英語版==============================?>
<?php endif;?>
これで、
/en/hoge/
/en/hoge/fuga/
ともに、/en/の子ページであると判定できました。
今回は、多言語化プラグインを使わない多言語対応にて利用しましたが、そのほかの階層が深いサイト構築でも利用できそうですね。
コメント
コメント一覧 (2件)
[…] deep-space.blue【WordPress】特定の固定ページの子孫ページかどうかを判別したい | deep-space.blue特定の親ページを持つページでだけ、出したいものがある WordPressの改修案件にて、既存の英語ペ […]
[…] deep-space-blue【WordPress】特定の固定ページの子孫ページかどうかを判別したい | deep-space-blue特定の親ページを持つページでだけ、出したいものがある WordPressの改修案件にて、既存の英語ペ […]