Alterar a ordem dos custom posts no WordPress
O facto do WordPress não ter nascido como CMS ainda se nota com alguma regularidade. Um exemplo disso é quando queremos mostrar, com uma ordem definida por nós, um série de elementos pertencentes a um custom post type, que por sua vez pertencem a uma custom taxonomy (num URL do tipo /<taxonomy-name>/<taxonomy-term>). Por defeito são mostrados por ordem de criação.
Isto implica criar uma nova instância do WP_Query com todos os argumentos necessários para obter o que pretendemos.
Criar o array com os argumentos tem que se lhe diga. Principalmente porque é preciso saber quais são, quais precisamos, quais podemos ignorar, etc. A forma mais simples de criar esse array é aproveitar o trabalho que o WordPress já fez.
Basta aceder ao array da query original e juntar-lhe apenas os argumentos que queremos alterados. Neste exemplo, o orderby e o order. Fazemos isso com a função do PHP array_merge , que concatena uma série de arrays usando sempre os valores do último array em caso de conflito (exactamente o que pretendemos).
<?php
// aceder à variável global
global $wp_query;
// juntar o nossos valores aos valores originais
$args = array_merge(
$wp_query->query_vars,
['orderby' => 'menu_order', 'order' => 'ASC']
);
// nova query com os novos argumentos
$query = new WP_Query($args);
?>
Simples e eficaz.
Dica relacionada: Alternativamente a definir a ordem na página de edição de cada post é melhor usar um plugin como o Simple Page Ordering.