Sortieren und Anzeigen von Seiten mit einem bestimmten benutzerdefinierten Feld (kein Tag)

Was ich im Grunde brauche, ist, Kinderseiten auf einem Elternteil anzuzeigen. Aber ich möchte die Liste der Kinder auf “wichtig” und “nicht wichtig” aufteilen, um sie am Anfang und am Ende einer Elternseite anzuzeigen.

Ich habe TAGs für Seiten in function.php aktiviert:

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

Und hier ist meine function und Shortcode, um alle Kinder auf einem Elternteil anzuzeigen:

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

Aber ich kann nicht herausfinden, wie man untergeordnete Seiten mit dem Tag ‘wichtig’ in dieser function aussortiert.

Ist es überhaupt möglich?

Solutions Collecting From Web of "Sortieren und Anzeigen von Seiten mit einem bestimmten benutzerdefinierten Feld (kein Tag)"

Sie müssen alle seitenbezogenen functionen löschen, wenn Sie diese Art von functionalität benötigen. Pages war nie dazu gedacht, Taxonomien zu haben, und daher wurde keine der seitenbezogenen functionen entwickelt, um irgendeine Art von Unterstützung für Taxonomien zu bieten

Überdenken Sie Ihre Strukturen und untersuchen Sie die Verwendung von benutzerdefinierten Post-Typen und benutzerdefinierten Taxonomien. Sie können auch prüfen, ob Sie benutzerdefinierte Felder für bestimmte functionen verwenden.

Wenn Sie wirklich mit dem aktuellen Setup bleiben müssen, werden Sie höchstwahrscheinlich eigene functionen oder benutzerdefinierte Filter schreiben, wenn die seitenbezogenen functionen keine Filter zum Filtern der relevanten Daten haben. Sie könnten auch in allgemeinere functionen schauen, die eine globalere Unterstützung für Ihr Problem haben, aber ich glaube nicht, dass es zu viele da draußen gibt

Die function wp_list_pages () hat einen Filter, der hier nützlich sein kann:

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

Persönlich würde ich Ihre Strukturen überdenken – Pieter hat das bereits vorgeschlagen, aber Sie können versuchen, es auf diese Weise zu verwenden:

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

Danke @PieterGoosen und @realloc.

Ich habe diese Lösung gefunden:

meta_key=important&meta_value=1 in wp_list_pages() . Und benutze benutzerdefinierte Felder für important: 1 Seiten important: 1 .

Dies ist für die Liste der wichtigen untergeordneten Seiten.

 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; }

Und das ist für Kinderseiten WICHTIG ausgeschlossen

 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; }