使用特定自定义域(非标记)对页面进行排序和显示

时间:2015-01-30 作者:Alex Mick

基本上,我需要的是在父页面上显示子页面。但我想将孩子列表分为“重要”和“非重要”两部分,以便在父页面的开头和结尾显示它。

我打开了函数中页面的标签。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”的子页面进行排序。

有可能吗?

3 个回复
最合适的回答,由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网友:Pieter Goosen

如果需要此类功能,则必须删除所有与页面相关的功能。页面从来就不应该有分类法,因此,没有任何与页面相关的函数能够为分类法提供任何类型的支持

重新考虑您的结构,并研究自定义帖子类型和自定义分类法的使用。您还可以研究为某些功能使用自定义字段。

如果您确实需要坚持当前的设置,如果页面相关函数没有用于过滤相关数据的过滤器,那么您很可能会编写自己的函数集或自定义过滤器。您还可以研究更通用的函数,这些函数对您的问题有更全面的支持,但我认为没有太多

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\' );

结束

相关推荐

Child theme functions.php

我不知道如何改变我的孩子主题的功能。php。在woothemes文档中,它说“子主题中的functions.php应该是空的,并且不包括父主题functions.php中的任何内容。”我需要使用此功能来不显示产品类别,但我不确定如何在我的子主题中执行此操作。也许有人能给我提供一些指示?add_action( \'pre_get_posts\', \'custom_pre_get_posts_query\' ); function custom_pre_get_posts_query( $