‘Sort_Column’=>‘Menu_Order’不起作用

时间:2020-12-02 作者:Steve

我们有一个简单的插件来显示一个树菜单,其中包括父页面,以及父页面的子页面(因此,当前页面的同级)。

我们正在使用以下内容get_pages 代码:

$pages = get_pages( [
   \'child_of\' => $parent,
   \'sort_order\' => \'ASC\',
   \'sort_column\' => \'menu_order\',
]);
但是,页面是按创建日期的升序列出的(最旧的优先)。

如何在编辑页面屏幕的右侧边栏中按页面顺序列出页面?

2 个回复
SO网友:Sally CJ

child_of 参数已设置,get_pages() 将使用get_page_children() 要获取子页面,不幸的是sort_column 将不再使用,因此最终列表将不会按指定的自定义排序列排序,因此您需要使用自己的代码来获取具有预期排序列(和顺序)的列表。

下面的示例使用一个递归调用的自定义函数(直到检索到所有子页),然后walk_page_tree() 使用(而不是wp_list_pages() 其问题与get_pages()) 输出列表中的页面(li) 布局:

// In the theme functions file:
function my_get_pages( $parent, $orderby = \'menu_order\', $order = \'ASC\' ) {
    $pages = get_pages( array(
        \'parent\'      => $parent,
        \'sort_column\' => $orderby,
        \'sort_order\'  => $order,
    ) );

    $children = array();
    foreach ( $pages as $page ) {
        $children[] = $page;

        // Retrieve grandchildren.
        $children2 = my_get_pages( $page->ID, $orderby, $order );
        if ( ! empty( $children2 ) ) {
            $children = array_merge( $children, $children2 );
        }
    }

    return $children;
}

// In your template:
$parent = 123; // parent post/Page ID

$pages = my_get_pages( $parent );

echo \'<ul>\' .
    walk_page_tree( $pages, 0, get_queried_object_id(), array() ) .
\'</ul>\';
这是另一个例子,与上面的例子类似,但这个例子不使用walk_page_tree() — 您可以完全控制HTML:

// In the theme functions file:
function my_wp_list_pages( $parent, $orderby = \'menu_order\', $order = \'ASC\' ) {
    $pages = get_pages( array(
        \'parent\'      => $parent,
        \'sort_column\' => $orderby,
        \'sort_order\'  => $order,
    ) );

    if ( empty( $pages ) ) {
        return;
    }

    // Just change the HTML markup based on your liking..
    echo \'<ul>\';

    foreach ( $pages as $page ) {
        printf( \'<li><a href="%s">%s</a></li>\',
            esc_url( get_permalink( $page ) ),
            get_the_title( $page ) );

        // Display grandchildren.
        my_wp_list_pages( $page->ID, $orderby, $order );
    }

    echo \'</ul>\';
}

// In your template:
$parent = 123; // parent post/Page ID

my_wp_list_pages( $parent );

SO网友:Howdy_McGee

两者wp_list_pages()get_pages() 函数具有sort_column 可以传入的参数menu_order. 例如:

$output = wp_list_pages( [
    \'include\'       => $page_ids,
    \'title_li\'      => false,
    \'echo\'          => false,
    \'sort_column\'   => \'menu_order\',
] );
菜单顺序为;订单“;在中看到的字段Page Attributes Metabox 或块编辑器的页属性部分。

相关推荐

inner foreach loop sorting

我有以下脚本,需要按字母顺序对内部foreach循环进行排序,但没有成功。$args = array( \'post_type\' => \'clinical_sites\', \'tax_query\' => array( \'relation\' => \'AND\', array(