get_terms orderby Name als Zahlen

Ich habe eine benutzerdefinierte Taxonomie mit Begriffen wie “Band 1”, “Band 2”, “Problem 1”, “Problem 2”, “Problem 10” und “get_terms orderby name” -Listen wie folgt ausgefüllt: Ausgabe 1, Ausgabe 10, Ausgabe 2 obwohl ich es als Ausgabe 1, Ausgabe 2, Ausgabe 10 brauche

Ich habe versucht, wp.stackexchange zu suchen und meine Google-Fu nutzlos zu verwenden. Jede Hilfe würde sehr geschätzt werden.

Solutions Collecting From Web of "get_terms orderby Name als Zahlen"

Es gibt viele ähnliche Beiträge im Forum, wenn du dich umsiehst.

Du hast keine Zahlen . Daher können Sie nicht numerisch sortieren. Sie müssen alphabetisch sortieren und das gibt Ihnen das Muster, das Sie sehen. Ich bin ehrlich gesagt nicht einmal sicher, ob get_terms eine numerische Sortierung unterstützt (auf einen Blick würde ich sagen, dass dies nicht der Fall ist), da ich bezweifle, dass viele Begriffe ausschließlich aus Zahlen bestehen.

Sie haben ein paar Optionen.

  1. Schreiben Sie Ihre eigene SQL-Abfrage. Ich denke, aber ich bin mir nicht sicher, Sie können dies in reinem SQL tun, aber es wäre schwierig – Sie müssten den Begriff Namen substrieren und danach sortieren. Es wäre haarig und wahrscheinlich nicht sehr effizient.
  2. Wenn Sie mehrere Begriffe gleichzeitig verwenden, können Sie sie in PHP sortieren, bevor Sie sie anzeigen. Sie müssten dasselbe wie in SQL tun und den Namen unterteilen, sortieren und wieder zusammensetzen. Jede Seitennummerierung wäre bei diesem Ansatz problematisch.

Ich weiß, dass dieser Beitrag sehr alt ist, aber immer noch für andere beantwortet, die hier ankommen.

Es folgt ein sehr einfacher Filter, um die Begriffe als Zahlen zu sortieren. Sie müssen nur die Variable $taxonomy_to_sort mit taxonomy slug und sie in functions.php Ihres Themes platzieren.

 add_filter( 'get_terms_orderby', 'terms_order_as_number', 10, 3); function terms_order_as_number($order_by, $args, $taxonomies){ $taxonomy_to_sort = "numbers"; if(in_array($taxonomy_to_sort, $taxonomies)){ $order_by .= " * 1"; } return $order_by; } 

Wo ist das Problem Wurzel?

Zuerst fragen Sie nach einem Teil, der sich in einer Zeichenfolge befindet. Dies ist keine native functionalität in irgendeiner Programmiersprache .

Zweitens, Ihr tatsächliches Problem ist nicht “Sortieren nach Nummer”, sondern die Art, wie Sie diese Zahlen konstruiert haben . Wenn Sie dieses Problem bereits vorher erkannt hätten (und es berücksichtigt hätten), hätten Sie einen Filter schreiben können, der diese Nullen vor Ihren Zahlen auffüllt.

Wie man das eigentliche Problem ignoriert und umgeht.

Das behebt das Problem nicht wirklich, aber da wir (und vielleicht auch Sie) nicht wissen, wie viele “Probleme” Sie haben könnten (10, 1k, 100k?), Fügen wir nur die Sortierung bei der Anzeige hinzu es. Hier ist ein Vorlagen-Tag, das Sie verwenden können:

 function wpse80063_numsorted_issues() { $terms = get_terms( 'issues', array( /* of possible args */ ); $digits = strlen( count( $terms ) ); $sorted_terms = array(); foreach ( $terms as $term ) { preg_match( "/\d+/", $term, $nr ); $nr = sprintf( "%0{digits}d", $nr ); // If the above line doesn't work, take this one: // $nr = str_pad( $nr, $digits, "0", STR_PAD_LEFT ); $sorted_terms[ $nr ] = $term; } ! empty( $sorted_terms ) AND sort( $sorted_terms ); return $sorted_terms; }