基本上,我需要的是在父页面上显示子页面。但我想将孩子列表分为“重要”和“非重要”两部分,以便在父页面的开头和结尾显示它。
我打开了函数中页面的标签。php类:
function tags_support_all() {
register_taxonomy_for_object_type(\'post_tag\', \'page\');
}
// ensure all tags are included in queries
function tags_support_query($wp_query) {
if ($wp_query->get(\'tag\')) $wp_query->set(\'post_type\', \'any\');
}
// tag hooks
add_action(\'init\', \'tags_support_all\');
add_action(\'pre_get_posts\', \'tags_support_query\');
下面是我用来显示父对象上所有子对象的函数和快捷码:
function my_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 class="list-in-page-menu">\' . $childpages . \'</ul><div style="clear:both">\';
}
return $string;
}
add_shortcode(\'my_childpages\', \'my_list_child_pages\');
但我不知道如何在这个函数中对标记为“important”的子页面进行排序。
有可能吗?
最合适的回答,由SO网友:Alex Mick 整理而成
感谢@PieterGoosen和@realloc。
我想出了这个解决方案:
已添加meta_key=important&meta_value=1
在里面wp_list_pages()
.并将为页面使用自定义字段important: 1
.
这是重要子页面的列表。
function important_list_child_pages() {
global $post;
if ( is_page() && $post->post_parent )
$childpages = wp_list_pages( \'meta_key=important&meta_value=1&sort_column=menu_order&title_li=&child_of=\' . $post->post_parent . \'&echo=0\' );
else
$childpages = wp_list_pages( \'meta_key=important&meta_value=1&sort_column=menu_order&title_li=&child_of=\' . $post->ID . \'&echo=0\' );
if ( $childpages ) {
$string = \'<ul class="list-in-page-menu">\' . $childpages . \'</ul></div></div><div style="clear:both">\';
}
return $string;
}
这是用于排除重要页面的子页面
function non_important_child_pages() {
global $post;
$args=array(
\'post_type\' => \'page\',
\'meta_key\' => \'important\',
\'meta_compare\' => \'=\',
\'meta_value\' => \'1\'
);
$pages = get_posts($args);
if ($pages) {
$pageids = array();
foreach ($pages as $page) {
$pageids[]= $page->ID;
}
$excluded = \'exclude=\'.implode(",", $pageids);
}
if ( is_page() && $post->post_parent )
$childpages = wp_list_pages( \'\' . $excluded . \'&sort_column=menu_order&title_li=&child_of=\' . $post->post_parent . \'&echo=0\');
else
$childpages = wp_list_pages( \'\' . $excluded . \'&sort_column=menu_order&title_li=&child_of=\' . $post->ID . \'&echo=0\');
if ( $childpages ) {
$string = \'<ul class="list-in-page-menu">\' . $childpages . \'</ul></div></div><div style="clear:both">\';
}
return $string;
}
SO网友:realloc
函数wp\\u list\\u pages()有一个过滤器,可以在这里使用:
/**
* Filter the array of pages to exclude from the pages list.
*
* @since 2.1.0
*
* @param array $exclude_array An array of page IDs to exclude.
*/
$r[\'exclude\'] = implode( \',\', apply_filters( \'wp_list_pages_excludes\', $exclude_array ) );
就我个人而言,我会重新思考你的结构——Pieter已经建议过了,但你可以尝试这样使用它:
function my_wp_list_pages_excludes( $exclude_array ) {
// $exclude_array = get_all_your_non_important_pages_here();
return $exclude_array;
}
add_filter( \'wp_list_pages_excludes\', \'my_wp_list_pages_excludes\' );