【WordPress】特定の固定ページの子孫ページかどうかを判別したい

2019年10月31日

特定の親ページを持つページでだけ、出したいものがある

WordPressの改修案件にて、既存の英語ページ(/en/)の子ページとして、日本語版とほぼ同じページを作ることになりました。

日本語版のページが特殊な作りで、page-****.phpを多用している状況。

このままでは/hoge/ と /en/hoge/で、同じpage-hoge.phpが表示されてしまう!

そこで、親ページ判定を行って、テンプレート上に分岐を書くという荒業で対処しました。

    親ページだけでは足りない

    はじめに下記のページを参考に、親ページのslugを判定してみました。

    固定ページの親のスラッグを取得する

    が、/en/hoge/(親子)では動くものの、/en/hoge/fuga/(孫)まで行くと判定できず。

     

    祖先ページを確認できるようにする

    『最も上の親ページを取得する関数』を作ってくださっている方がいました。

    WordPress 固定ページの最上親ページを取得する

    上記サイトのコードと、親ページのスラッグを取得するコードを組み合わせたものが下記。

    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/の子ページであると判定できました。

    今回は、多言語化プラグインを使わない多言語対応にて利用しましたが、そのほかの階層が深いサイト構築でも利用できそうですね。