locate_template mit mehreren Kategorien?

In diesem Beispiel (aus Wrox Buch), wenn eine single-category-$slug.php Datei existiert, wird sie angezeigt, ansonsten ist es die single.php Datei. Aber wenn wir mehr als eine Kategorie für jeden Beitrag haben (nehmen wir an, dass das Array $templates mehr als ein Ergebnis enthält), was wird $template enthalten? Wo wählen wir die richtige Schnecke mit diesem Code?

 get_queried_object_id(); /* Get the post categories. */ $terms = get_the_terms( $post_id, 'category' ); /* Loop through the categories, adding slugs as part of the file name. */ $templates = array(); foreach ( $terms as $term ) $templates[] = "single-category-{$term->slug}.php"; /* Check if the template exists. */ $locate = locate_template( $templates ); /* If a template was found, make it the new template. */ if ( !empty( $locate ) ) $template = $locate; } /* Return the template file name. */ return $template; } ?> 

Vielen Dank

Solutions Collecting From Web of "locate_template mit mehreren Kategorien?"

Der Code, den Sie gepostet haben, durchläuft alle Kategorien, denen der Post zugewiesen ist.

Der Foreach erstellt einen String, der jede mögliche Vorlagendatei darstellt, nach der gesucht werden soll, und ordnet sie alle $template .

Die locate_template() -function wird durch das $templates locate_template() gehen und das erste von ihnen, das tatsächlich existiert, zurückgeben. Dies wird der Variablen $ template zugewiesen.

Wenn sich herausstellt, dass keine der Dateien existiert, glaube ich, dass locate_template() false locate_template() . Ihr Code prüft dort einfach, ob locate_template() eine der Vorlagen gefunden hat, bevor sie $template locate_template() .

Die gesamte function gibt dann den Namen dieser Vorlage an den Filter zurück, der diese Vorlage lädt, wenn Sie eine tatsächliche Zeichenfolge zurückgeben. Andernfalls wird die Vorlagenhierarchie nach “single” in der nächsten Art der Vorlage fortgesetzt.

Bearbeiten: Zusätzliche Informationen

get_the_terms verwendet wp_get_object_terms die standardmäßig die Begriffe in aufsteigender Reihenfolge nach Namen zurückgeben. Wenn also ein Beitrag in mehreren Kategorien ist, wird die Vorlage des ersten Begriffs immer alphabetisch geladen. Um dieses Verhalten zu ändern, verwenden Sie wp_get_object_terms direkt und spezifizieren Sie orderby arg zu ‘count’, ‘slug’, ‘term_group’, ‘term_order’ oder ‘term_id’.