wp_list_pages
可以接受child_of
param,仅显示作为给定页面子级的页面。但您必须传递父页面的ID(因此您不能在其中放入slug)。
但你可以使用get_page_by_path
根据页面的slug获取页面对象。
您必须做的另一件事是向您的短代码添加一些参数。
下面是代码:
function childpages_shortcode_callback( $atts ) {
$atts = shortcode_atts( array(
\'parent\' => false,
), $atts, \'childpages\' );
$parent_id = false;
if ( $atts[\'parent\'] ) {
$parent = get_page_by_path( $atts[\'parent\'] );
if ( $parent ) {
$parent_id = $parent->ID;
}
} else { // if no parent passed, then show children of current page
$parent_id = get_the_ID();
}
$result = \'\';
if ( ! $parent_id ) { // don\'t waste time getting pages, if we couldn\'t get parent page
return $result;
}
$childpages = wp_list_pages( array(
\'sort_column\' => \'menu_order\',
\'title_li\' => \'\',
\'child_of\' => $parent_id,
\'echo\' => 0
) );
if ( $childpages ) {
$result = \'<ul>\' . $childpages . \'</ul>\';
}
return $result;
}
add_shortcode( \'childpages\', \'childpages_shortcode_callback\' );