web-dev-qa-db-ja.com

ワードプレスで親ページの子ページのリストを表示する方法

以下の形式のメニューがあります。

Treatment
 -Beauty
  --Services
  --Products
 -Surgery
 -washing

私は以下のリンクをたどっている: WordPressで親ページの子ページのリストを表示する方法

ただ、「美」ページのサブページは欲しくありません。私は "治療"サブページだけが欲しいのです。

2
Arshad Hussain

このコードをfunctions.phpに追加してください。コードの説明は以下の通りです。

function wpb_list_child_pages() { 

    global $post; 

    if ( is_page() && $post->post_parent )    
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' .$post->post_parent . '&echo=0' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );

    if ( $childpages ) {    
        $string = '<ul>' . $childpages . '</ul>';
    }

    return $string;
}

add_shortcode('wpb_childpages', 'wpb_list_child_pages');

説明

コードは、ページに親があるかどうか、またはページ自体が親であるかどうかを確認します。親ページの場合は、それに関連付けられている子ページが表示されます。子ページの場合は、その親ページの他のすべての子ページが表示されます。最後に、これが子ページも親ページもない単なるページである場合、コードは単純に何もしません。そのため、このショートコード[wpb_childpages]を子ページが表示されるページに追加するだけです。

最初のレベルで停止するように更新します

if ( is_page() && $post->post_parent )    
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0&depth=1' );
else
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0&depth=1' );

私のlocalhostでうまくいった私のテスト出力:

テスト1

-t1

--tt1

-t2

そして、私がTest1ページでそのショートコードを書いたときに表示される出力は以下の通りです。

t1

t2

2
Zammuuz

現在のページのサブページだけが欲しいなら、これを使います:

function wpb_list_child_pages() {

    global $post; 

if ( is_page() && $post->ID )    
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0&depth=2' );

    if ( $childpages ) {    
         $string = '<ul>' . $childpages . '</ul>';
    }

    return $string;
}

add_shortcode('wpb_childpages', 'wpb_list_child_pages');
0
Mike