2009-02-05 17 views
7

Yo uso wp_list_categories() para obtener la lista de todas las categorías y generar la barra de navegación. ¿Hay alguna manera de ordenar estas categorías en un orden particular que no sea el orden alfabético?¿Cómo pedir categorías en WordPress?

por ejemplo: Connect, Noticias & Vistas, Q & A, Hola inicio, puesta en marcha ... 101

Respuesta

2

Ésta es incorporado en wordpress_wp_list_categories

wp_list_categories('orderby=name'); 

creo que le ayudaría a cabo

6

Si no utiliza el campo Descripción de las categorías, el pedido también puede hacerse ingresando un número en cada campo de Descripción, y posteriormente usar Javascript/jQuery para ordenar según esta numeración.

La función wp_list_categories tiene un argumentouse_desc_for_title que puede establecer como true:

wp_list_categories('use_desc_for_title=1'); 

La descripción de la categoría se establece ahora en el atributo de título <a> de las etiquetas en el código HTML resultante.

tanto, si utiliza los números en el campo de descripción, la categoría de la lista resultante puede tener este aspecto:

<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> 

ya se puede ordenar la lista, por ejemplo, con jQuery en el evento document.ready. Si usa subcategorías de forma jerárquica, use una función recursiva como esta:

$(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.

  • No utilice un 0 (cero) en el campo de descripción, se tendrá en cuenta y establece en NULL
  • Después de la clasificación es posible que desee deshacerse del título atributos que se establece en números, esto se puede hacer fácilmente con jQuery.
+6

wow realmente, ¿Puede haber algo más hacky entonces esto? – Tosh

0

Para el beneficio de los futuros visitantes, aquí está la solución fácil a este problema:

la actualidad hay una serie de plugins que le permiten ordenar las categorías u otras taxonomías personalizados en WordPress. Puede ver algunos de ellos en el directorio del complemento de WordPress “category order” tag page. Puedo confirmar personalmente que el complemento Custom Taxonomy Order NE hace el trabajo.

0

Lo hice generando varias listas de términos. Lo llamo más tarde por mi propia orden. Soy un principiante de PHP.

En primer lugar, almacenar, en una variable diferente, el ID para cada término categoría:

$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']; 
     }; 

Entonces, crear varios argumentos para cada wp_list_categories() excluidos, con esta variable los términos que quieren:

 $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) 
    ); 

Por último, puedo llamar por separado cada lista plazo:

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

Techn ical approach

El problema en el núcleo de wordpress es que la tabla wp_terms no tiene una columna term_order. Eso significa que wordpress estándar no es compatible con el orden de los términos personalizados. Si mira esto WP database structure, puede encontrar la tabla wp_term_relationships. Esta tabla es responsable de las relaciones entre las publicaciones y la taxonomía (sus categorías) Y esta tabla tiene una columna term_order.

Ahora, con una instrucción SQL simple ALTER TABLE wp_terms ADD term_order INT(11) NOT NULL DEFAULT 0 (no olvide la variable $wpdb->wp_terms) puede agregar una columna a la tabla, que es responsable de su orden de categoría personalizado. Luego puede poner su orden de categoría personalizado en estas dos columnas de wp_term_relationships y wp_terms. Cuando todo haya terminado, puede conectar el filtro de get_terms_args y cambiar el orderby al term_order.

Aquí una lista de todos los enlaces relevantes para el enfoque técnico:

Un el complemento puede hacer el trabajo por usted

Pregunta a mi complemento para resolver esto: WordPress Real Categories Management. WP RCM crea un campo term_order adicional en la tabla de términos wp. También trae muchas otras funciones útiles como puedes ver en la captura de pantalla a continuación. Le permite organizar sus categorías de wordpress de una manera agradable. Es fácil de usar, solo arrastre & elimine sus categorías y muévala a un orden específico. El complemento funciona en todos los tipos de publicaciones personalizadas.

Drag & Drop categories order

A partir de la descripción del producto que puedo citar. Si desea probar el complemento, también existe un demo on the plugin page.

Hay una gran cantidad de plugins gratuitos

Esto se puede solucionar con una gran cantidad de plugins gratuitos disponibles en el repositorio de wordpress.org plugin. Simplemente busque "orden de categoría" en su Tablero de Wordpress> Complementos> Instalar.

0

La mayoría de los temas no usan la descripción de la categoría para nada.La solución fácil que hice fue usar números en la descripción. La publicación superior aquí actualmente tiene algún truco jQuery desde aquí, no es necesario.

Supongo que también puede agregar campos de pedidos personalizados.

Sólo

$categories = get_categories(array(
    'orderby' => 'description', 
    'order' => 'ASC' 
)); 
Cuestiones relacionadas