Cum să creezi o sortare personalizată pentru categoriile WordPress
Am această problemă pe care o întâmpin. Încerc să sortez categoriile pentru a le afișa în ordinea în care le doresc. Am citit documentația WordPress despre toate opțiunile de sortare. Cu toate acestea, nu există nicio indicație despre cum să aleg categoriile și să le fac să curgă în modul dorit.
Iată ce prezintă Codex-ul:
orderby (string) Sortează categoriile alfabetic sau după ID-ul unic al categoriei. Implicit se sortează după ID-ul Categoriei. Valori valide:
- id
- name - implicit
- slug
- count
- term_grouporder (string) Ordinea de sortare pentru categorii (fie ascendentă sau descendentă). Implicit este ascendentă. Valori valide:
- asc - implicit
- desc
Cu toate acestea, după cum am spus, acest lucru nu mă ajută pentru că am nevoie să le afișez în ordinea pe care o aleg eu.
Iată codul pe care îl implementez în acest moment. Care este în ordinea în care vreau să le afișez.
<?php
$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( __( "Vezi toate postările din %s" ), $category->name ) . '" ' . '>' . $category->name . '</a>' . ' ' . '(' . $category->count . ')' . '</li> ';
}
?>

Dacă deja folosești Advanced Custom Fields (și ar trebui să o faci!), poți crea un câmp de ordine pentru categoriile tale prin care să le setezi manual în ordine numerică.
Apoi, tot ce trebuie să faci este:
$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){
...
Unde category_order
este numele câmpului pe care l-ai creat cu ACF.
Notă: Folosind metoda PHP 5.3 pentru usort.

Bine, am găsit acest plugin care face exact ce îmi doresc. Nu voiam să folosesc un plugin, dar acesta pare destul de ușor și își face treaba perfect. http://wordpress.org/plugins/taxonomy-terms-order/

Codul original va funcționa dacă schimbi argumentele în: '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( __( "Vezi toate articolele din %s" ), $category->name ) . '" ' . '>' . $category->name . '</a>' . ' ' . '(' . $category->count . ')' . '</li> ';
}
