I have a sample:

CODE PHP:

 <ul class="categories-list">
        <?php wp_list_categories('title_li='); ?>
 </ul>

This code displays the category list sorted by name.

What I want to do is to have a custom order … not by name not by id.

For example, this order:

   1. Category with ID 5:

   2. Category with ID 3:

   3. Category with ID 9:

How can I do this using the function above?

3 Answers
3

You will need to add term meta to your categories. In this metafield you will store the string or number that you want to use as a base for your custom order (tutorial). Let’s say you have generated a meta field called my_cat_meta which holds integers that say in which order you want them to be displayed.

Now you can pass this metakey to wp_list_categories. This function ultimately relies on get_terms, which explains which arguments the function can take. You can limit the search to terms that have the metakey defined and order according to that metakey. This amounts to:

$args = array (
  'title_li' -> '',
  'meta_key' -> 'my_cat_meta',
  'orderby'-> 'meta_key');
wp_list_categories ($args);

A slightly hacky way would be to use the ‘description’ field that is a default field in WP categories. Many themes don’t display it, so you could use it to store metadata. In that case you could skip building your own metafield and use:

$args = array (
  'title_li' -> '',
  'orderby'-> 'description');
wp_list_categories ($args);

Leave a Reply

Your email address will not be published. Required fields are marked *