Cómo crear un orden personalizado para las categorías de WordPress
Tengo este problema que estoy encontrando. Estoy tratando de ordenar mis categorías para mostrarlas en el orden que deseo. He leído la documentación de WordPress sobre todas las opciones de ordenamiento. Sin embargo, no hay indicación de cómo elegir las categorías y hacer que fluyan de la manera que quiero.
Esto es lo que presenta el Codex:
orderby (string) Ordena las categorías alfabéticamente o por ID único de categoría. El valor predeterminado es ordenar por ID de Categoría. Valores válidos:
- id
- name - predeterminado
- slug
- count
- term_grouporder (string) Orden de clasificación para categorías (ascendente o descendente). El valor predeterminado es ascendente. Valores válidos:
- asc - predeterminado
- desc
Sin embargo, como mencioné, esto no me ayuda porque necesito que se muestren en el orden que yo elija.
Aquí está el código que estoy implementando en este momento, que está en el orden en que quiero que se muestren.
<?php
// Argumentos para obtener las categorías en un orden específico
$args = array(
'orderby' => 'ID',
'order' => 'ASC',
'include' => '5,6,7,8,29,9,10,11,12,13,14,15,16'
);
$categories = get_categories($args);
foreach($categories as $category) {
echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Ver todas las entradas en %s" ), $category->name ) . '" ' . '>' . $category->name . '</a>' . ' ' . '(' . $category->count . ')' . '</li> ';
}
?>

Si ya estás usando Advanced Custom Fields (¡y deberías!), puedes crear un campo de orden para tus categorías desde el cual puedes establecer su orden manualmente de forma numérica.
Entonces todo lo que tienes que hacer es:
$categories = get_categories( $args );
usort($categories, function($a, $b) {
return get_field("category_order", "category_".$a->term_id) - get_field("category_order", "category_".$b->term_id);
});
foreach ($categories as $category){
...
Donde category_order
es el nombre del campo que creaste con ACF.
Nota: Usando la forma de usort de PHP 5.3.

Bien, encontré este plugin que hace exactamente lo que necesito. No quería usar un plugin, pero este parece bastante ligero y cumplió perfectamente con el trabajo. http://wordpress.org/plugins/taxonomy-terms-order/

El código original funcionará si cambias los argumentos a: 'orderby' => 'include'
$args = array(
'orderby' => 'include',
'order' => 'ASC',
'include' => '5,6,7,8,29,9,10,11,12,13,14,15,16'
);
$categories = get_categories($args);
foreach($categories as $category) {
echo '<li><a href="' . get_category_link( $category->term_id ) . '" title="' . sprintf( __( "Ver todas las entradas en %s" ), $category->name ) . '" ' . '>' . $category->name . '</a>' . ' ' . '(' . $category->count . ')' . '</li> ';
}
