Bestellen Sie get_terms mit einem benutzerdefinierten Feld

Ich habe eine benutzerdefinierte Taxonomie von “crb_issues”, die ein benutzerdefiniertes Feld hat, das “issue_date” ist, das einen Datumswert für jeden Begriff ausgibt, der wie “20140601” yearmonthday aussieht.

Ich versuche, alle Taxonomiebegriffe mit get_terms auszufüllen und sie nach diesem benutzerdefinierten Feld zu sortieren. Unten ist der Code, an dem ich gearbeitet habe, der den Begriff Name und den Wert des “issue_date” gut ausgibt. Aber ich habe eine harte Zeit, um zu bekommen, was von diesem benutzerdefinierten Feld ausgegeben wird.

$args = array( 'meta_key' => 'issue_date', 'orderby' => 'meta_value_num', 'order' => 'DESC', 'hide_empty' => true, 'number' => '4', 'fields' => 'all', ); $terms = get_terms("crb_issues", $args); if ( !empty( $terms ) && !is_wp_error( $terms ) ){ echo "
    "; foreach ( $terms as $term ) { echo "
  • " . $term->name . "
  • "; the_field('issue_date', $term); } echo "
"; }

Jede Hilfe würde sehr geschätzt werden.

Solutions Collecting From Web of "Bestellen Sie get_terms mit einem benutzerdefinierten Feld"

Anstatt Ihre Begriffe in dieser ersten Schleife auszugeben, würde ich sie stattdessen verwenden, um ein neues Array zu erstellen, mit Ihrem Issue_Date als Schlüssel:

 $my_new_array = array( ); foreach ( $terms as $term ) { $issue_date = get_field( 'issue_date', $term ); $my_new_array[$issue_date] = $term->name; } 

Sie können dann dieses neue Array in der folgenden Reihenfolge durchlaufen:

 ksort( $my_new_array, SORT_NUMERIC ); foreach ( $my_new_array as $issue_date => $term_name ) { echo "
  • " . $term_name . " " . $issue_date . "
  • "; }

    Dies ist nicht getestet.

    Eine viel kürzere Lösung, füge dies einfach vor foreach :

     usort($terms, function($a, $b) { return get_field('issue_date', $a) - get_field('issue_date', $b); }); 

    Danke Vancoder für deine Hilfe !!! Ich habe mir den ganzen Tag die Haare ausgerissen, um es herauszufinden. Lustigerweise war deine Lösung eines von einem halben Dutzend, die ich auf meinem Whiteboard geschrieben habe, ABER ich hatte keine Ahnung, wie man ein Array damit tatsächlich als Schlüssel erstellt. Ich bin so ein Noob. Unten ist der Code, den ich mit einigen Kommentaren für jemand anderen verwendet habe, der das versucht!

     < ?php $terms = get_terms("crb_issues"); $issue_archive = array( ); // creates an array for all terms inside of crb_issues tax using the custom field "issue_date" as the key foreach ( $terms as $term ) { $issue_date = get_field( 'issue_date', $term ); $issue_archive[$issue_date] = $term->name; } krsort( $issue_archive, SORT_NUMERIC ); //sorts the issue_archive array from high to low foreach ( $issue_archive as $issue_date => $term_name ) { echo "
  • " . $term_name . " " . $issue_date . "
  • "; //displays the term name and customfield issue_date if (++$i == 4) break; //Stops the foreach after 4 } ?>

    Wenn jemand bessere Kommentare für diesen Code hat, lassen Sie es mich wissen, oder besser, mit allem umzugehen. Aber ich denke, das ist eine ziemlich tolle Lösung.

    Ich habe eine ähnliche Methode verwendet, aber ich wollte mehr Werte aus der Taxonomie speichern als den Wert für Name und benutzerdefiniertes Feld, also speicherte ich sie als object und erstellte ein array , ähnlich dem, was tatsächlich zurückgegeben wird, wenn Sie die function verwenden get_terms .

    Erhalten Sie Ihre Bedingungen:

     $terms = get_terms('your-taxonomy'); 

    Erstellen Sie dann ein neues Array und speichern Sie sie nach meinem benutzerdefinierten Feldwert, der in diesem Fall numerisch war:

     $newterms = array(); foreach($terms as $term) { $order = get_field('order', $term); //THIS MY CUSTOM FIELD VALUE $newterms[$order] = (object) array( 'name' => $term->name, 'slug' => $term->slug, 'term_id' => $term->term_id ); } 

    Sortiere sie numerisch:

     ksort( $newterms, SORT_NUMERIC ); 

    Verwenden Sie dann die foreach Schleife, um die Werte der einzelnen Objekte foreach :

     foreach ( $newterms as $newterm ) { echo '' . $newterm->name . ''; } 

    Im Wesentlichen schreibe ich das Array neu, um den Schlüssel meiner benutzerdefinierten Reihenfolge zu verwenden, aber in diesem Fall brauchte ich den Slug, den Namen und die ID des Begriffs, also speicherte ich ihn als ein Objekt und nicht wie oben beschrieben.

    Mein Endziel war, dass ich ein erweitertes benutzerdefiniertes Feld eingerichtet habe. Wenn ein Taxonomiebegriff erstellt wurde, konnte er vom Benutzer eine numerische Reihenfolge erhalten, und dann konnte ich die Begriffe basierend auf ihrer gewünschten Reihenfolge durchlaufen.

    Hoffe das hilft jemandem!

    Danke Phil Hoyt, genau das habe ich gesucht. Aber, leider, ich konnte es nicht mit meiner Einrichtung arbeiten. Was macht Arbeit ist das Folgende:

      < ?php // Solution for sorting by ACF custom-field for tracks categories // http://support.advancedcustomfields.com/forums/topic/sorting-categories-list-by-custom-field/ $categories = get_categories('taxonomy=tracks'); $sorted_cats = array(); foreach($categories as $cat){ //$ordr = get_field('track_order', 'tracks_'.$cat>term_id); //wasn't working so used the line below $ordr = get_field( 'track_order', $cat ); $sorted_cats[$ordr] = $cat; } krsort($sorted_cats);//ksort orders ascending, krsort reverses order (ie biggest to smallest) ?> 

    Prost

    Sortiere Terme nach Array-Wert ‘order’ anstelle von Array-Schlüssel. Wenn Sie 2 Einträge mit demselben Schlüssel haben, überschreibt der letzte den ersten. Dies wird das verhindern und alle sichtbar machen:

     $sorted = array(); $args = array( 'hide_empty' => false ); $terms = get_terms( 'my-tax', $args ); if( $terms ) : foreach ( $terms as $term ) { $sorted[] = array( 'order' => get_field( 'order', $term ), // Get field from ACF 'name' => $term->name, ); } function sortByOrder($a, $b) { return $a['order'] - $b['order']; } usort($sorted, 'sortByOrder'); foreach( $sorted as $t ) :?>  < ?php echo $t['name']; ?>  < ?php endforeach; endif;