2009-02-05 12 views
7

Ich verwende wp_list_categories(), um die Liste aller Kategorien zu erhalten und die Navigationsleiste zu generieren. Gibt es eine Möglichkeit, diese Kategorien in einer anderen Reihenfolge als der alphabetischen Reihenfolge zu ordnen?Wie bestelle ich Kategorien in WordPress?

zB: Connect, Nachrichten & Ansichten, Q & A, Hallo Startup, Startup 101 ...

Antwort

2

Dies ist eingebaute in wordpress_wp_list_categories

wp_list_categories('orderby=name'); 

denke ich, dass Sie aus

6
helfen würde,

Wenn Sie das Feld Beschreibung der Kategorien nicht verwenden, können Sie die Reihenfolge auch durch Eingabe einer Zahl in jedes Feld Beschreibung festlegen und anschließend Javascript/jQuery verwenden, um basierend auf dieser Nummerierung zu sortieren.

Die wp_list_categories Funktion hat ein use_desc_for_title Argument, das Sie auf true setzen:

wp_list_categories('use_desc_for_title=1'); 

Die Kategorie Beschreibung nun auf den <a> Tags Titel Attribut in der resultierenden HTML gesetzt ist.

Also, wenn Sie Zahlen in das Beschreibungsfeld verwenden, kann die resultierende Kategorie Eintrag wie folgt aussehen:

<ul id="category_list"> 
    <li><a href="#" title="3">Category C</a></li> 
    <li><a href="#" title="1">Category A</a></li> 
    <li><a href="#" title="2">Category B</a></li> 
</ul> 

Jetzt können Sie die Liste sortieren, zum Beispiel mit jQuery am document.ready Ereignis. Wenn Sie Unterkategorien hierarchisch verwenden, verwenden Sie eine rekursive Funktion wie diese:

$(document).ready( 
    function() { 
     sort_list_recursive($('#category_list')); 
    } 
); 

function sort_list_recursive(parent) { 
    var lst = parent.children('li'); 
    lst.sort(
     function(a, b) { 
      var _a = a.getElementsByTagName('a')[0].title; 
      var _b = b.getElementsByTagName('a')[0].title; 
      return _a > _b ? 1 : -1; 
     } 
    ).appendTo(parent); 
    lst.each(function() { 
     $(this).children('ul').each(function() { 
      sort_list_recursive($(this)); 
     }); 
    }); 
} 

N.B.

  • Sie eine 0 (Null) in das Beschreibungsfeld nicht verwenden wird sie ignoriert und auf null gesetzt werden
  • Nach dem Sortieren Sie den Titel bekommen möchten vielleicht zu befreien Attribute, die auf Zahlen gesetzt sind, diese kann einfach mit jQuery gemacht werden.
+6

wow wirklich, es Hacky dann bekommt das? – Tosh

0

Zum Wohl der zukünftigen Besucher, hier ist die einfache Lösung für dieses Problem:

Es gibt inzwischen eine Reihe von Plugins, die es Ihnen ermöglichen, Kategorien oder andere kundenspezifische Taxonomien in Wordpress zu bestellen. Sie können einige davon im WordPress-Plugin-Verzeichnis “category order” tag page sehen. Ich kann persönlich bestätigen, dass Custom Taxonomy Order NE Plugin die Arbeit macht.

0

Ich habe es erstellt mehrere Termlisten. Ich rufe es später auf meine eigene Bestellung an. Ich bin ein PHP-Anfänger.

Zuerst habe ich speichern, in einer anderen Variable, die ID für jede Kategorie Suchbegriff:

$terms = get_terms('my_taxonomy', 'hide_empty=0'); 
     foreach ($terms as $term) { 
      ${$term->slug} = get_term_by('slug', $term->slug, 'product_cat'); 
      ${$term->slug.'_array'} = (array)${$term->slug}; 
      ${$term->slug.'_array_id'} =${$term->slug.'_array'}['term_id']; 
     }; 

Dann habe ich mehrere Argumente für jede wp_list_categories() ohne mit dieser Variablen erstellen die Begriffe ich will:

 $args = array(
     'taxonomy'  => 'my_taxonomy', 
     'orderby'  => 'name', 
     'show_count' => true, 
     'pad_counts' => false, 
     'hierarchical' => true, 
     'title_li'  => '', 
     'hide_empty' => 0, 
     'show_option_all' => 'Show all', 
     'exclude' => array($term1_array_id, $term2_array_id) 
    ); 

     $args_1 = array(
     'taxonomy'  => 'my_taxonomy', 
     'orderby'  => 'name', 
     'show_count' => true, 
     'pad_counts' => false, 
     'hierarchical' => true, 
     'title_li'  => '', 
     'hide_empty' => 0, 
     'exclude' => array($term3_array_id, $term4_array_id, $term1_array_id) 
    ); 

     $args_2 = array(
     'taxonomy'  => 'my_taxonomy', 
     'orderby'  => 'name', 
     'show_count' => true, 
     'pad_counts' => false, 
     'hierarchical' => true, 
     'title_li'  => '', 
     'hide_empty' => 0, 
     'exclude' => array($term1_array_id, $term4_array_id, $term5_array_id) 
    ); 

Schließlich kann ich separat jeden Begriff Liste nennen:

<ul> 
    <?php wp_list_categories($args); ?> 
    <?php wp_list_categories($args_1); ?> 
    <?php wp_list_categories($args_2); ?> 
</ul> 
2

Techn ical Ansatz

Das Problem in WordPress Kern ist, dass die Tabelle wp_terms keine term_order Spalte hat. Das bedeutet, dass Standard-Wordpress die benutzerdefinierte Termenreihenfolge nicht unterstützt. Wenn Sie sich diese WP database structure ansehen, finden Sie die Tabelle wp_term_relationships. Diese Tabelle ist für die Beziehungen zwischen Beiträgen und der Taxonomie (Ihren Kategorien) verantwortlich UND diese Tabelle hat eine Spalte term_order.

Jetzt mit einer einfachen SQL-Anweisung ALTER TABLE wp_terms ADD term_order INT(11) NOT NULL DEFAULT 0 (nicht die Variable $wpdb->wp_terms vergessen) können Sie eine Spalte der Tabelle hinzufügen, die für Ihre benutzerdefinierte Kategorie Reihenfolge verantwortlich ist. Dann können Sie Ihre benutzerdefinierte Kategorie Reihenfolge in diesen zwei Spalten wp_term_relationships und wp_terms setzen. Wenn alles fertig ist, können Sie in den Filter get_terms_args einhaken und den orderby in term_order ändern.

Hier ist eine Liste aller relevanten Links für den technischen Ansatz:

A Plugin kann den Job für Sie erledigen

Überprüfen Sie mein Plugin, um dies zu lösen: WordPress Real Categories Management. WP RCM erstellt ein zusätzliches Feld term_order in der wp-Terms-Tabelle. Es bringt auch viele andere nützliche Funktionen, wie Sie in dem Screenshot unten sehen können. Es ermöglicht Ihnen, Ihre WordPress-Kategorien auf eine nette Art und Weise zu organisieren. Es ist einfach zu bedienen, nur Drag & Drop Ihre Kategorien und verschieben Sie es auf eine bestimmte Reihenfolge. Das Plugin funktioniert in allen Custom Post-Typen.

Drag & Drop categories order

Aus der Produktbeschreibung i zitieren kann. Wenn Sie das Plugin ausprobieren möchten, gibt es auch eine demo on the plugin page.

Es gibt viele kostenlose Plugins

Dies kann mit einer Menge kostenloser Plugins in wordpress.org Plugin-Repository gelöst werden. Suchen Sie einfach in Ihrem WordPress Dashboard> Plugins> Installieren nach "category order".

0

Die meisten Themen verwenden die Beschreibung der Kategorie für nichts.Eine einfache Problemumgehung war die Verwendung von Zahlen in der Beschreibung. Der oberste Beitrag hier hat derzeit einige jQuery Hack von hier, es ist nicht notwendig.

Sie können auch benutzerdefinierte Auftragsfelder hinzufügen.

Gerade

$categories = get_categories(array(
    'orderby' => 'description', 
    'order' => 'ASC' 
)); 
Verwandte Themen