get_categories() sortieren nach “term_order”?

Lesezeit: 2 Minuten

Benutzeravatar von jcoder
Coder

Laut dem WordPress-Kodexakzeptiert die Methode get_categories() die folgenden Argumente für ihre Eigenschaft orderby:

**orderby** (string) Sort categories alphabetically or by unique category ID. The default is sort by Category ID. Valid values:

id
name - default
slug
count
term_group

Wenn Sie sich jedoch die Tabelle „wp_term_relationships“ ansehen, gibt es ein scheinbar unbenutztes Feld namens „term_order“, das für jede Kategorie, die ich jemals erstellt habe, auf 0 gesetzt ist.

Ist es möglich, das Feld term_order zu verwenden, um als indizierte Sortierreihenfolge für Kategorien zu dienen?

Ich habe inkrementelle Werte für meine Kategorien in dieses Feld eingefügt und versuche, die Bestellung mit dem folgenden Code vergeblich an die Funktion zu übergeben:

    $cat_args=array(

        'hierarchical' => 0,

        'orderby' => 'term_order',

        );


        $categories = get_categories($cat_args);

  • Ihr Code oben funktioniert nicht, weil get_categories akzeptiert den Wert ‘term_order’ nicht mit dem Schlüssel ‘orderby’, was ist der Grund für die Verwendung von term_order?

    – David Chase

    5. März 2013 um 20:39 Uhr

Viele Jahre später,

Sie können diesen Code in Ihre functions.php einfügen:

function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
    return $query_vars['orderby'] == 'term_order' ? 'term_order' : $orderby;
}

add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );

Dieser Code zwingt WP, die zu verwenden orderby => term_order Argument in Ihrer Begriffsabfrage.

Benutzeravatar von Odeh Khanfar
Odeh Khanfar

Die Antwort von @cédric-dagherir-dahive, die die Verwendung vorschlägt get_terms_orderby Filter ist ein großartiger Ansatz, um Begriffe in der Reihenfolge anzuzeigen, in der sie dem Objekt (Beitrag) hinzugefügt wurden. Es funktioniert jedoch nicht für alle Begriffsabfragen und würde den folgenden Fehler erzeugen:

Unbekannte Spalte „term_order“ in „Order Clause“.

Weil einige Begriffsabfragen einfach nur Daten abrufen von (wp_terms & wp_term_taxonomy) Datenbanktabellen und haben keine INNER JOIN mit (wp_term_relationships) Tabelle, die die hat term_order aufstellen. Daher die Fehlermeldung.

Das order by term_order -Klausel sollte nur hinzugefügt werden, wenn die Abfrage die Viele-zu-Viele-Beziehung zwischen der Taxonomie und dem Objekt betrifft (z get_the_terms).

Daher habe ich den Code aktualisiert, um zunächst zu prüfen, ob der Begriff Abfrage Objekte beinhaltet, bevor ich die hinzufüge term_order zur Bestellklausel:

function wpcf_filter_terms_order( $orderby, $query_vars, $taxonomies ) {
        return ( ! is_null($query_vars["object_ids"]) ) ? 'term_order' : $orderby;
}

add_filter( 'get_terms_orderby', 'wpcf_filter_terms_order', 10, 3 );

Ich habe alle WordPress-Funktionen durchsucht und die einzige, die Sie verwenden können 'term_order' ist wp_get_object_terms und Sie können seine Funktion sehen hier.

Ab diesem Zeitpunkt, auch wenn WordPress dies nicht zum Filtern der Kategorien verwendet get_categories() Sie oder andere Design-/Plug-in-Entwickler können die obige Funktion verwenden, um object_terms zu erhalten und sie nach term_order zu sortieren/filtern.

Ein paar Jahre später fand ich diese Lösung:

Die Aufgabe kann mit einem Filter und einer angepassten Taxonomie gelöst werden.

https://core.trac.wordpress.org/ticket/5857#comment:4

1428970cookie-checkget_categories() sortieren nach “term_order”?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy