サポート » 使い方全般 » slug が重複した場合の page-スラッグ.php の呼び出し方

  • 解決済 netanswerco

    (@netanswerco)


    下記のような親子関係がある場合、
    スラッグの「faq」が重複して設定可能になりますが、
    その際の、page-スラッグ.php のルールを使って分けて呼び出したのですが、上手く呼び出せません。
    そもそも、page-スラッグ.php のルールでは呼び出せないのでしょうか?
    //////////////////////////////////////////////
    +–お問い合せ(info)
    |
    +–FAQ(faq)
    |
    +–スマホ(sp)–+–スマホFAQ(faq)
    ///////////////////////////////////////////////

    個人的なイメージでは、
    ■ page-faq.php  (FAQ)
    ■ page-sp-faq.php (スマホFAQ)
    で呼び出せたら良いのですが、現状はどちらも「page-faq.php」を見に行きます。

    ページ属性のテンプレートで振り分ければ良いのですが、
    なんとなく腑に落ちなくて質問させて頂きました。
    このような場合は、どのように対応されておりますか?
    ご助言頂ければ幸いです。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • page-***.phpを読み込むときはquery_varsからpagenameを持ってくるので、階層構造が維持されないようですね。

    こんな感じのフィルターを入れてあげると’page-sp-faq.php’みたいなテンプレートを読み込めるかと思います。

    function my_page_template ( $template ){
    	global $post;
    	$post_type = get_post_type_object($post->post_type);
    	if ( $post_type->hierarchical ){
    		$slug = get_page_uri($post->ID);
    		$slug = str_replace( '/', '-', $slug );
    		$buf_template = locate_template('page-' . $slug . '.php');
    		$buf_page_template = get_page_template_slug();
    		if ( !empty($buf_template) && empty($buf_page_template) ){
    			$template = $buf_template;
    		}
    	}
    	return $template;
    }
    add_filter( 'page_template', 'my_page_template' );
    

    グローバルの$postを使用しているので、get_page_uri()ではなくて、$wp_query->query[‘pagename’]から引っ張ってきてもいいかもしれません(hierarchicalの判定も必要ないような…)。

    トピック投稿者 netanswerco

    (@netanswerco)

    x743 様

    貴重なお時間ありがとうございます。
    設定したら、page-sp-faq.php を読みに行くようになりました。

    ブログラムの内容的には、勉強不足な私には分らないところが多いですが、後でゆっくり解析して勉強させていただきます。

    心のもやもやがスッキリ致しました。
    これからも利用させて頂きます。

    これを設定する弊害ってないですよね?

    丁寧に教えていただきありがとうございました。

    ページ属性のところにテンプレートを指定した場合やテンプレートファイルが存在しない場合は、フィルターの引数が素通りするようになっているので大丈夫かな…と思います。

    トピック投稿者 netanswerco

    (@netanswerco)

    x743様

    そのような仕様なんですね。
    安心しました。
    何から何までありがとうございます。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「slug が重複した場合の page-スラッグ.php の呼び出し方」には新たに返信することはできません。