Seiten auflisten, um nur auf der Whitelist angezeigte Unterseiten anzuzeigen

In meinem benutzerdefinierten Thema möchte ich alle übergeordneten Seiten anzeigen, aber für einige dieser übergeordneten Seiten möchte ich ihre Unterseiten nicht anzeigen.

Ich weiß, dass Sie all diese Unterseiten dem ‘exclude’ Argument der wp_list_pages function hinzufügen können, aber ich möchte sicherstellen, dass, wenn jemand eine neue Unterseite hinzufügt, diese auch nicht angezeigt würde.

Baum ausschließen könnte eine Möglichkeit sein, aber dieser ignoriert auch die übergeordnete Seite.

Mein Code:

$subtitle_walker = new Subtitle_Walker(); $args = array( 'authors' => '', 'child_of' => 0, 'date_format' => get_option('date_format'), 'depth' => 2, 'echo' => 1, 'exclude' => '', 'exclude_tree' => '', 'include' => '', 'link_after' => '', 'link_before' => '', 'post_type' => 'page', 'post_status' => 'publish', 'show_date' => '', 'sort_column' => 'menu_order', 'title_li' => '', 'walker' => new Subtitle_Walker ); wp_list_pages($args); 

Solutions Collecting From Web of "Seiten auflisten, um nur auf der Whitelist angezeigte Unterseiten anzuzeigen"

Die einfachste wp_list_pages() Seiten-IDs für wp_list_pages() auf die Whitelist zu wp_list_pages() besteht darin, innerhalb von get_pages() einen Self- wp_list_pages() / Single-Time-Filter get_pages() , der die Daten entweder aus dem Cache oder aus einer neuen Abfrage in die database get_pages() .

Sie haben mehrere Möglichkeiten darin:

Filtere das endgültige DB-Ergebnis

Um die Liste der zurückgegebenen Seiten zu filtern, können Sie sich ein schnelles Plugin mit einem Filter-Callback erstellen, das Sie in Ihren Vorlagen verwenden können:

 < ?php /** Plugin Name: WPSE (#165677) Whitelist pages Callback */ function wpse165677_whitelist_pages( $pages, $arguments ) { if ( empty( $pages ) ) return $pages; // Remove instantly remove_filter( current_filter(), __FUNCTION__, 10 ); // whitelist: loop through pages and build your return array of allowed pages return $pages; } 

Dann in deiner Vorlage:

 add_filter( 'get_pages', 'wpse165677_whitelist_pages', 10, 2 ); wp_list_pages( [ // your arguments ] ); 

Dadurch werden einige unnötige Seiten abgefragt. Dies ist jedoch eine schnelle Lösung und beeinträchtigt die performance möglicherweise nur, wenn Sie über Hunderte von Seiten verfügen.

Ignorieren Sie Seiten, die nicht auf der weißen Liste stehen, im MarkUp

Erstellen Sie einfach einen benutzerdefinierten Walker, der nur Unterseiten MarkUp für Ihre Seiten auf der weißen Liste erstellt.

Seiten vor und abholen

Sie können nur die ID abfragen

 $wpdb->prepare( "SELECT id FROM{$wpdb->posts} WHERE {$wpdb->posts}.post_type = 'page' AND {$wpdb->posts}.id IN (%s)", join( ",", [ /* IDs Array */ ] ), ); 

wo Sie dann einfach diesen Rückgabewert gegen alle zurückgegebenen IDs des Seitenposttyps diffundieren, um eine Blacklist zu erstellen. Dann geben Sie das innerhalb eines Callbacks auf dem wp_list_pages_excludes , das zum Ausfüllen des exclude . Sie können wp_parse_id_list() , um das Erstellen der Liste zu vereinfachen.

 add_filter( 'wp_list_pages_excludes', function( $blacklist ) { // logic to build blacklist return $blacklist; } 

Argumente weitergeben

Weder im DocBlock noch im Codex wp_list_pages() wird erklärt, dass auf diesen functionsargumenten kein Filter ausgeführt wird, bevor sie an get_pages() . Das Argument include funktioniert also auch für diese function. 'child_of', 'parent', 'exclude', 'meta_key', 'meta_value', or 'hierarchical'. Sie, dass dieses Argument nicht zusammen mit 'child_of', 'parent', 'exclude', 'meta_key', 'meta_value', or 'hierarchical'.

Fazit

Wie oft kann die Aufgabe, mit der Sie konfrontiert sind, auf viele verschiedene Arten getriggers werden. Was Sie letztendlich verwenden, bleibt Ihnen überlassen und hängt von Ihren ganz spezifischen Anforderungen ab.