blog.knym.net | I'm searching something to change my life.

wordpressで子ページのデータを取得

/wp-contents/themes/{THEME_NAME}/functions.php
に以下のように子ページのデータを取得する関数をしこんだ。
(子カテゴリーとか検索するといっぱい見つかるけど、子ページってなかなか見つからない。)


function getPageChildren($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);
}
via beginsprite log » WordPress, 親ページと子ページを全部出力


それで、
下記のようにHTMLをループさせるわけだけども、そのテンプレートとなるHTMLを変数として渡して、このループ周りのphpをすっきりさせられないものかと少し考えた。


<?php
$parentPageId = 7;
loopPageChildren($parentPageId);
function loopPageChildren($parentPageId) {
    $results = getPageChildren ($parentPageId);
    if($results):
        foreach ($results as $row) :
            $id=$row->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_excerpt()?>
        </div>
    </div>
<?php
            endwhile;
        endforeach;
    endif;
}


から、下記のようにして試してみた。


&lt;?php
$parentPageId = 7;
$tmplHTML=&lt;&lt;&lt;EOF
&lt;div class=&quot;paged paged-{$post-&gt;ID}&quot;&gt;
    &lt;h3 class=&quot;paged-title paged-title-{$post-&gt;ID}&quot;&gt;{$post-&gt;post_title}&lt;/h3&gt;
        &lt;div class=&quot;entry&quot;&gt;
            {$post-&gt;post_excerpt}
        &lt;/div&gt;
    &lt;/div&gt;
EOF;
loopPageChildren($parentPageId,$tmplHTML);</p>

<p>function loopPageChildren($parentPageId) {
    $results = getPageChildren ($parentPageId);
    if($results):
        foreach ($results as $post) :
            echo $tmplHTML;
        endforeach;
    endif;
}


{$post->hogehoge}の中身が代入されずに消えている。。。


echo $tmplHTML
の部分を
echo <<<EOF
<div class="paged paged-{$post->ID}">
    <h3 class="paged-title paged-title-{$post->ID}">{$post->post_title}</h3>
        <div class="entry">
            {$post->post_excerpt}
        </div>
    </div>
EOF;
って書くとうまい具合にいくんだけど、、なぜだろう?


ちなみに、<<<EOFはヒアドキュメントということを初めて知った。

Related Posts

 

Essentials

Meta

Pages

Categories