サポート » 使い方全般 » ページのカスタムフィールド機能を活用したい

  • お世話になります。
    ページのカスタムフィールド機能を活用したいと思っています。

    親/子/孫と3層のページを作成し、孫ページの3つのカスタムフィールドにデータを入力。
    その一覧を子ページにテーブルで表示させたいと思っています。
    どなたか教えていただけないでしょうか?
    宜しくお願いいたします。

    ■ページ構成
    親ページ 子ページのリンク一覧を表示するインデックス

    >子ページ1 (自分の子ページにあたる)孫ページの3つのカスタムフィールドのデータをテーブルで表示
    >>孫ページ1-1
    >>孫ページ1-2
    >>孫ページ1-3

    >子ページ2 (自分の子ページにあたる)孫ページの3つのカスタムフィールドのデータをテーブルで表示
    >>孫ページ2-1
    >>孫ページ2-2
    >>孫ページ2-3

    >子ページ3 (自分の子ページにあたる)孫ページの3つのカスタムフィールドのデータをテーブルで表示
    >>孫ページ3-1
    >>孫ページ3-2
    >>孫ページ3-3
     ・
     ・
     ・
     ・

    ■子ページのテーブル
    ※孫ページの4つのカスタムフィールドの項目名を、CF1・CF2・CF3・CF4としたとき・・

    ―――――――――――――――――――――――――――――――――――
    |      CF1       |      CF2      |      CF3      |
    ―――――――――――――――――――――――――――――――――――
    | 孫ページ1-1のCF1 | 孫ページ1-1のCF2 | 孫ページ1-1のCF3 |
    ―――――――――――――――――――――――――――――――――――
    | 孫ページ1-2のCF1 | 孫ページ1-2のCF2 | 孫ページ1-2のCF3 |
    ―――――――――――――――――――――――――――――――――――
    | 孫ページ1-3のCF1 | 孫ページ1-3のCF2 | 孫ページ1-3のCF3 |
    ―――――――――――――――――――――――――――――――――――
     ・
     ・
    ※孫ページのページ数は子ページによってことなります。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • モデレーター jim912

    (@jim912)

    inuyamasantaroさん、こんにちは。

    大まかなロジックとしては

    1. 子ページにいるとき、孫ページのリストを取得する
    2. 孫ページのリストをループさせて、ループ中でスタムフィールドのデータを取得
    3. 表示させるカスタムフィールドが揃っていれば、テーブルの行を出力

    といった感じになります。

    これを(ある程度私の決めつけもありますが)コードにすると、下記のようになるかと思います。

    <?php
    if ( is_page() && count( $post->ancestors ) == 1 ) {
    	$childs = get_pages( 'hierarchical=0&sort_column=menu_order&parent=' . $post->ID );
    	if ( count( $childs ) ) {
    		$meta_keys = array( 'cf1', 'cf2', 'cf3' );
    		$first_flg = true;
    		foreach( $childs as $child ) {
    			$clild_metas = get_post_custom( $child->ID );
    			foreach ( $meta_keys as $key ) {
    				if ( ! isset( $clild_metas[$key] ) ) { continue; }
    			}
    			if( $first_flg ) {
    ?>
    <table>
    	<thead>
    		<tr>
    			<th>CF1</th>
    			<th>CF2</th>
    			<th>CF3</th>
    		</tr>
    	</thead>
    	<tbody>
    <?php
    				$first_flg = false;
    			}
    ?>
    		<tr>
    <?php
    foreach ( $meta_keys as $key ) {
    	echo '			<td>' . wp_specialchars( implode( ', ', $clild_metas[$key] ) ) . '</td>' . "\n";
    }
    ?>
    		</tr>
    <?php
    		}
    		if ( ! $first_flg ) {
    ?>
    	</tbody>
    </table>
    <?php
    		}
    	}
    
    }
    ?>

    ※ 表示する項目を$meta_keysで定義しています。必要な項目に変更・追加いただくと共に、thの出力部分の変更をしてください。
    ※ 上記のコードは、孫ページのカスタムフィールド項目全てが揃っていないと行が出力されないロジックになっています。項目の有無に係わらず行の出力を行う場合は、若干コードを変える必要があります。
    ※ 孫ページの出力順は、menu_order(順序)の順で取得しています。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「ページのカスタムフィールド機能を活用したい」には新たに返信することはできません。