親ページの「タイトル」と「本文」、子ページの「タイトル」と「本文」をまとめて出力したい。
どうも該当するテンプレートタグが無い様子。
無い知恵しぼって考えた。
functions.php
<?php function beginsprite_get_children($id) { global $wpdb; $sql = "SELECT * FROM $wpdb->posts WHERE (post_type = 'page' AND post_status = 'publish') AND post_parent = $id ORDER BY menu_order ASC"; return $wpdb->get_results($sql); } function beginsprite_print_children($results) { foreach ($results as $row) : beginsprite_wp_query($row->ID); endforeach; } function beginsprite_wp_query($id) { $query = new WP_Query("page_id=".intval($id)); while ($query->have_posts()) : $query->the_post(); ?> <div class="paged paged-<?php the_ID(); ?>"> <h3 class="paged-title paged-title-<?php the_ID(); ?>"><?php the_title() ?></h3> <div class="entry"> <?php the_content(); ?> </div> </div> <?php $result = beginsprite_get_children ($id); if ($result) beginsprite_print_children($result); endwhile; } ?> |
テンプレート
// $parent_id = $post->post_parent; beginsprite_wp_query($parent_id); |
$parent_id に親ページのIDが入っていることが前提のコード。
こういうのを再帰的処理っていうのか分からないけど・・・
無限ループになりそうでおっかなびっくり使ってみたところ、使えているようなので良しとする。
現在の出力タグはフラットなので、階層的になるように(いつか)したいと思う。
関数側で引数の正当性をちゃんとチェックしないといけないんだろうな。
update
Wordpress Forum Japan ではもっとすっきりしたコードが公開されている。
http://ja.forums.wordpress.org/topic/1269
「WordPress, 親ページと子ページを全部出力」への3件のフィードバック