6

Wordpressのテーマには、子ページに情報を表示させるセクションがあります。これは私が今持っているものです:

<?php 
                $my_wp_query = new WP_Query();
                $all_wp_pages = $my_wp_query->query(array('post_type' => 'page'));

                $staff = get_page_children(8, $all_wp_pages);

                foreach($staff as $s){
                    $page = $s->ID;
                    $page_data = get_page($page);
                    $content = $page_data->post_content;
                    $content = apply_filters('the_content',$content);
                    $content = str_replace(']]>', ']]>', $content);
                    echo '<div class="row-fluid"><span class="span4">'; 
                    echo get_the_post_thumbnail( $page ); 
                    echo '</span><span class="span8">'.$content.'</span></div>';
                } 
        ?>

表示されるはずの子ページが5つありますが、戻ってくるのは3つだけです。$ staffでprint_rを使用して、他のページが配列内にあるかどうかを確認しましたが、そうではありません。問題が何であるかわかりません。

4

5 に答える 5

24

get_page_children()またはに問題はありませんnew WP_Query()。デフォルトでは、最後に作成されたページ数WP_Queryのみが返されます。xに課せられた制限WP_Queryです。

get_page_children()によって返されたpages配列WP_Queryを取得し、そのリストから子ページをフィルタリングするだけです。WordPress Codexによると:get_page_children「...子を取得するためのSQLクエリは作成しません。」

この問題を修正するには、次を使用します。

    $query = new WP_Query( 'posts_per_page=-1' );

修正されたコード:

    <?php 
    $my_wp_query = new WP_Query();
    $all_wp_pages = $my_wp_query->query(array('post_type' => 'page', 'posts_per_page' => -1));

    $staff = get_page_children(8, $all_wp_pages);

    foreach($staff as $s){
        $page = $s->ID;
        $page_data = get_page($page);
        $content = $page_data->post_content;
        $content = apply_filters('the_content',$content);
        $content = str_replace(']]>', ']]>', $content);
        echo '<div class="row-fluid"><span class="span4">'; 
        echo get_the_post_thumbnail( $page ); 
        echo '</span><span class="span8">'.$content.'</span></div>';
    } 
    ?>

これは、ページの子を取得する必要があるときにいつでも呼び出すことができるヘルパー関数です。

    function my_get_page_children( $page_id, $post_type = 'page' ) {
        // Set up the objects needed
        $custom_wp_query = new WP_Query();
        $all_wp_pages    = $custom_wp_query->query( array( 'post_type' => $post_type, 'posts_per_page' => -1 ) );

        // Filter through all pages and find specified page's children
        $page_children = get_page_children( $page_id, $all_wp_pages );

        return $page_children;
    }

ヘルパー関数を使用してコーディングします

    foreach(my_get_page_children(8) as $s){
        $page = $s->ID;
        $page_data = get_page($page);
        $content = $page_data->post_content;
        $content = apply_filters('the_content',$content);
        $content = str_replace(']]>', ']]>', $content);
        echo '<div class="row-fluid"><span class="span4">'; 
        echo get_the_post_thumbnail( $page ); 
        echo '</span><span class="span8">'.$content.'</span></div>';
    } 
于 2013-01-23T05:44:04.570 に答える
3

私も同様の問題を抱えていました-get_page_childrenの動作がおかしいようです...(私の場合、3つの子を持つ1つのページでは、3つが返され、4つのページでは0が返されます!-うまくいきません。)

代わりにカスタムクエリを使用して問題を解決しました。

$params = array(
'post_type'=>'page',
'post_parent'=> 8,
);
$staff = query_posts($params);

ここに似ています:http: //www.sanraul.com/2010/08/28/get-page-children/

wp_reset_query();注:これを使用する場所によっては、同様に必要になる場合があります。そうしないとquery_posts()、メインループが壊れる可能性があります。

お役に立てば幸いです。-A

于 2013-01-18T00:59:51.237 に答える
0
$curID = get_the_ID();

query_posts(
    array(
        'post_type'=>'page',
        'post_parent'=>$curID,
        'orderby' => 'menu_order',
        'order' => 'ASC'
    )
);

echo '<ul>';
while ( have_posts() ) : the_post();
    echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
endwhile;
echo '</ul>';

wp_reset_query();
于 2014-05-20T08:21:37.560 に答える
0

以下の編集を参照してください

この問題を経験して解決したばかりなので、私が取らなければならなかったアプローチを共有したいと思いました。

元々、新しいWP_Queryを使用してすべてのページを取得し、クエリ結果をget_page_children()にフィードしました。

$all_pages = new WP_Query( array( 'post_type' => 'page' ) );
wp_reset_postdata();
$page_id = get_the_ID();

// pass $all_pages as the second parameter
$page_children = get_page_children( $page_id, $all_pages );

foreach ( $page_children as $childObj ) {
    echo '<a href="' . $childObj->guid . '">' . $childObj->post_title . '</a>'
}

何らかの理由で、上記のコードは私には機能しませんでした。

代わりに、次のように、$all_pagesの'posts'オブジェクトを2番目のパラメーターとして渡しました。

$all_pages = new WP_Query( array( 'post_type' => 'page' ) );
wp_reset_postdata();
$page_id = get_the_ID();

// pass the posts object of $all_pages as the second parameter
$page_children = get_page_children( $page_id, $all_pages->posts );

foreach ( $page_children as $childObj ) {
    echo '<a href="' . $childObj->guid . '">' . $childObj->post_title . '</a>';
}

これが誰かに役立つことを願っています!


編集: get_page_children()関数でさらに問題が発生した後、同じ最終結果を達成するために一貫して機能している別のルートを選択します。

$page = get_queried_object();
$children = get_pages( 'child_of=' . $page->ID . '&parents=' . $page->ID );

// loop through the child page links
foreach ( $children as $child ) {
    echo '<a href="' . get_permalink( $child->ID ) . '">' . get_the_title( $child->ID ) . '</a>';
}
于 2015-12-03T18:16:00.287 に答える
0

簡単に使用できます

$args = array(
        'post_parent' => $parent_id ,
        'post_type'   => 'page', 
        'numberposts' => -1,
        'post_status' => 'publish' 
    );
    $children = get_children( $args );

$ children変数は、親IDのすべての子ページに表示されます。WP_Queryを使用している場合は、コードの後に​​クエリをリセットして詳細を確認してください https://developer.wordpress.org/reference/functions/get_page_children/

このコードをfunctions.phpファイルで使用し、親ページIDを使用して関数を呼び出します

    function load_clildren( $parent_id=null ){
    $parent_id  =   ( $parent_id ) ? $parent_id : $post->ID;

    $args = array(
        'post_parent' => $parent_id ,
        'post_type'   => 'page', 
        'numberposts' => -1,
        'post_status' => 'publish' 
    );
    $children = get_children( $args );
    return $children;
}

関数呼び出しメソッド

$ch_pages   =   load_clildren( $parent_id );

または親ページで使用する

$ch_pages   =   load_clildren();
于 2018-10-20T12:55:54.057 に答える