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.