サポート » 使い方全般 » 固定ページで親子関係を作った時にheader内の条件分岐で、子ページすべてに親と同じスタイルシートを追加したい

  • 固定ページで親子関係を作った時にheader内の条件分岐で、子ページすべてに親と同じスタイルシートを追加したいです。

    <?php if ( is_page(array(‘aboutus’,’asan’,’bsan’,’csan’))) : ?>
    <link rel=”stylesheet” href=”<?php echo get_stylesheet_directory_uri(); ?>/about.css” type=”text/css” media=”all”/>

    /aboutus が親で
    asan,bsan,csan,・・・ っと子ページがたくさんあるのですが、
    親のaboutusで子ページにも同じスタイルシートを適用する方法はありますか??

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 試していませんが、

    <?php
    global $post;     // ループの外であるとき
    
    if ( is_page() && $post->post_parent ) {
        // 子ページ
    } else {
        // 子ページではない
    }
    ?>

    関数リファレンス/is page

    参考まで。

    ありがとうございます。
    しかしながら、ダメでした。

    子ページをすべて拾ってきてしまうようで、
    /about/の子にも
    /contact/の子にも
    全部 「//子ページ」 の内容が出ていました。

    if ( is_page(‘about’) && $post->post_parent ) {
    ともしてみたのですが、今度はaboutの子ページにも「//子ページ」が出なくなってしまいました。

    ありがとうございました。

    ちょっと試してみました。

    で、親子関係があるものすべてについて汎用的に使えるものではないですが、

    <?php
    global $post;     // ループの外であるとき
    if ( is_page() && $post->post_parent ) {
     	if( $post->post_parent == 'スタイルを同じにしたい親のID' ) {
    		// やりたい処理
    	}
    } else {
        // その他の処理
    }
    ?>

    とか、どうですかね。

    ページの親のIDを引っ張ってきているので、スタイルを同じにしたい親のIDで同じなら処理を行うという感じです。
    なんかもやもやしていますが、この辺をどうにかできればもっとスマートにできると思います。
    力およばず、すいません。

    • この返信は3 ヶ月、 1 週前に ioxrxogi さんが編集しました。

    ありがとうございます!
    やりたい事出来ました!!

    wordpressで「○○の子ページ」という指定の仕方は
    用意されてないのですね。

    重ね重ね、ありがとうございました。

    WordPress4.7で実装されたtemplate_hierarchyフィルターを使ってみたくなったので
    こんなのを作ってみました。

    
    //親要素を指定してテンプレートを読み込む
    add_filter("page_template_hierarchy","page_chiled_template");
    function page_chiled_template(){
      $id = get_queried_object_id();
      $post = get_post($id);
      $parent = get_post($post->post_parent);
      $parent_id = $parent->ID;         //親要素のID取得
      $parentname = $parent->post_name; //親要素のスラッグ取得
      $template = get_page_template_slug();
      $pagename = get_query_var('pagename');
    
    	if ( ! $pagename && $id ) {
    		// If a static page is set as the front page, $pagename will not be set. Retrieve it from the queried object
    		$post = get_queried_object();
    		if ( $post )
    			$pagename = $post->post_name;
    	}
    
    	$templates = array();
    	if ( $template && 0 === validate_file( $template ) )
    		$templates[] = $template;
    
      //親要素がある場合page-{parentname}-child.phpを設定
      if($parentname){
        $parentname_decoded = urldecode( $parentname );
    		if ( $parentname_decoded !== $parentname ) {
    			$templates[] = "page-{$parentname_decoded}-child.php";
    		}
    		$templates[] = "page-$parentname-child.php";
      }
      //親要素がある場合page-{id}-child.phpを設定
      if ( $parent_id )
        $templates[] = "page-$parent_id-child.php";
    
    	if ( $pagename ) {
    		$pagename_decoded = urldecode( $pagename );
    		if ( $pagename_decoded !== $pagename ) {
    			$templates[] = "page-{$pagename_decoded}.php";
    		}
    		$templates[] = "page-$pagename.php";
    	}
    	if ( $id )
    		$templates[] = "page-$id.php";
    	$templates[] = 'page.php';
      return $templates;
    }
    

    parentaという親ページにchild1 child2 child3という固定ページが用意されている場合
    page-parenta-child.phpを作成するとchild1 child2 child3に反映されます
    優先順位としては
    1.固定ページに指定されているテンプレートファイル
    2.親ページのページスラッグ+child(page-parent-child.php)
    3.親ページのID+child(page-100-child.php)
    4.子ページのページスラッグ(page-child1.php)
    5.子ページのID(page-200.php)
    6.page.php
    の順番にしていますが子要素のページテンプレートを優先させたいなら2-3と4-5の位置をずらしてもいいかもしれません。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。