Erhalten Sie benutzerdefinierte Taxonomien aus mehreren Posts

Ich habe mich jetzt einen halben Tag lang umgesehen, aber bisher keinen Erfolg.

Ich habe einen benutzerdefinierten Post-Typ (Rezept) und zwei benutzerdefinierte Taxonomien erstellt, die dazu gehören (type und cook). Ich möchte alle “Köche” aus einer Gruppe von Rezepten auflisten können.

Ich kann es für ein einzelnes Rezept tun, aber ich bin mit mehreren fest.

Hat jemand eine Idee, wie man das erreicht?

Solutions Collecting From Web of "Erhalten Sie benutzerdefinierte Taxonomien aus mehreren Posts"

Für jeden Beitrag fügen Sie jeden Begriff einem assoziativen PHP-Array hinzu:

 foreach ( $posts as $post ) { $term_objects = get_the_terms( $post->ID, $taxonomy_name ); foreach ( $term_objects as $term_object ) { // Store term objects by term name. $terms_list[ $term_object->name ] = $term_object; } } 

Nehmen wir an, Bob wurde auf den ersten beiden Rezepten als Koch aufgeführt. Wenn der erste Post verarbeitet wird, wird ein Feld namens Bob zu $terms_list hinzugefügt. Auf dem zweiten Post wird das Bob Feld mit der gleichen Information überschrieben (ein Term-Objekt).

Das Ergebnis nach dem Durchlaufen aller Beiträge ist ein key => values denen die Schlüssel eindeutig sind. Bob zum Beispiel wird nur einmal aufgeführt.

Da Sie keinen Code angegeben oder uns get_posts() , wie die Ausgabe aussehen soll, habe ich dieses Beispiel mit der function get_posts() , um das Array von Posts zu erhalten und eine ungeordnete Liste verwendet, um die Köche als Links anzuzeigen.

 $cooks = wpse_125356_get_terms_for_posts( get_posts( array( 'post_type' => 'recipe' ) ), 'cook' ); if ( $cooks ) { echo "
    \n"; foreach ( $cooks as $cook ) { $url = get_term_link( $cook ); if ( is_wp_error( $url ) ) { echo "\t
  • {$cook->name}
  • \n"; } else { echo "\t
  • {$cook->name}
  • \n"; } } echo "
\n\n"; } /** * Get all unique terms for an array of posts for a given taxonomy. * * @param array $posts An array of post objects. * @param string $taxonomy_name The name of the taxonomy to retrieve. * @return array An array term objects ordered by term name. */ function wpse_125356_get_terms_for_posts( array $posts, $taxonomy_name ) { $terms_list = array(); foreach ( $posts as $post ) { $term_objects = get_the_terms( $post->ID, $taxonomy_name ); // $term_objects can also be boolean false or a WP_Error object. if ( is_array( $term_objects ) ) { foreach ( $term_objects as $term_object ) { // Store term objects by term name. $terms_list[ $term_object->name ] = $term_object; } } } // Sort term objects by term name. ksort( $terms_list ); // Return a list of term objects, if any. return array_values( $terms_list ); }