在Wordpress中仅显示直接子项

时间:2012-02-14 04:11:23

标签: wordpress

是否可以在Wordpress中仅显示直接子页面。例如,我有页面和子页面结构,如:

Page 1
  Page 11
     Page 111
     Page 112
  Page 12
  Page 12
Page 2
  Page 21
  Page 22
     Page 221
     Page 222

所以在上面的例子中,我想列出第1页的所有子页面 - 第11页,第12页,第13页。但我不想列出Page 111和Page 112,这是Wordpress的默认行为。< / p>

有没有办法这样做?

3 个答案:

答案 0 :(得分:0)

见这里。

http://codex.wordpress.org/Function_Reference/wp_nav_menu

在此功能中,您可以使用深度来定义级别。将其设置为1以显示顶级页面,并将其设置为2以显示顶级和直接子级别页面,依此类推。感谢

答案 1 :(得分:0)

下面,

实际上,我发现了http://codex.wordpress.org/Function_Reference/get_pages

$packages = get_pages('child_of=' . get_the_ID() .'&hierarchical=0&parent=' . get_the_ID()); 

假设,我正在浏览第1页。需要注意的是,child_of =和parent =具有相同的ID。

答案 2 :(得分:0)

如果要构建菜单,则可以使用wp_nav_menu()函数中的“ depth”参数,将其设置为“ 1”以获得直接的同级。但是,get_pages()函数中没有“ depth”参数。我构建了一个短代码来显示页面上的子菜单(而不是导航菜单),并且通过检查所检索页面的父级,将自身限制为直接同级或直接子级。希望这会有所帮助: [in_page_submenu级别=“兄弟姐妹”]

// two possible values of a "level" parameter in the shortcode args:
// "siblings" and "children"
add_shortcode('in_page_submenu', function ($args) {

        global $post;

        $this_page_id = $post->ID;
        $parent = $post->post_parent;
        $children = false;
        $siblings = false;

        if ( $args['level'] == "siblings" || !isset($args['level']) ) {
            $siblings = true;
            $query_arr = array(
                'child_of' => $parent,
                'exclude' => $this_page_id
            );

        } else if ($args['level'] == "children") {
            $children = true;
            $query_arr = array('child_of' => $post->ID);
        }

        $pages = get_pages($query_arr);

        $html = "<div>";

        foreach($pages as $p) {     

            $parent_id = wp_get_post_parent_id($p);
            $display = true;

            if ($children && $parent_id != $this_page_id) {
                $display = false;
            }

            if ($siblings && $parent_id != $parent) {
                $display = false;
            }

            if ($display) {

                // do something with $html var

            }
        }

        $html .= "</div>";

        return $html;

});