Classificar e exibir páginas com campo personalizado específico (não tag)

O que eu preciso basicamente é exibir páginas filho em um pai. Mas eu quero dividir a lista de filhos para, digamos, ‘importante’ e ‘não importante’ para exibi-lo no início e no final de uma página pai.

Ligue TAGs para páginas em function.php como:

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

E aqui está a minha function e shortcode para exibir ALL childs em um pai:

 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 = '
    ' . $childpages . '
'; } return $string; } add_shortcode('my_childpages', 'my_list_child_pages');

Mas não consigo descobrir como resolver as páginas da criança com a tag ‘importante’ nesta function.

É possível de alguma forma?

Solutions Collecting From Web of "Classificar e exibir páginas com campo personalizado específico (não tag)"

Você precisará soltar todas as funções relacionadas à página se você precisar desse tipo de funcionalidade. Páginas nunca foram feitas para ter taxonomias e, por isso, nenhuma das funções relacionadas à página foi construída para oferecer qualquer tipo de suporte para taxonomias

Repensar suas estruturas e analisar o uso de tipos de postagem personalizados e taxonomias personalizadas. Você também pode procurar o uso de campos personalizados para determinadas funcionalidades.

Se você realmente precisa ficar com a configuração atual, provavelmente escreverá seu próprio conjunto de funções ou filtros personalizados se as funções relacionadas à página não tiverem filtros para filtrar os dados relevantes. Você também pode procurar funções mais genéricas que tenham um suporte mais global para seu problema, mas não acho que existam muitos

A function wp_list_pages () possui um filtro que pode ser útil aqui:

 /** * 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 ) ); 

Pessoalmente, eu repensaria suas estruturas – Pieter já sugeriu isso, mas você pode tentar usá-lo dessa maneira:

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

Obrigado @PieterGoosen e @realloc.

Eu encontrei esta solução:

Adicionado meta_key=important&meta_value=1 em wp_list_pages() . E usarei campo personalizado para páginas important: 1 .

Isto é para a lista de páginas secundárias IMPORTANTES.

 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 = '
    ' . $childpages . '
'; } return $string; }

E isso é para páginas filho excluídas.

 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 = '
    ' . $childpages . '
'; } return $string; }