vendredi 25 septembre 2026

À propos

Contact

Tips

Ordonner manuellement des contenus avec menu_order et page-attributes

Trier des fiches par date ou par titre ne suffit pas toujours : parfois, c'est l'ordre manuel du client qui doit primer. Voici comment l'activer.

Par Clément Hadrot • 16 février 2021 • 4 min de lecture • Aucun commentaire
Ordonner manuellement des contenus avec menu_order et page-attributes

Un client viticole voulait présenter ses cuvées dans un ordre précis : d’abord les vins phares, puis les nouveautés, puis le reste — un ordre qui ne correspond ni à la date de publication, ni à l’alphabet. Sur les pages, WordPress gère ce cas depuis toujours grâce à la colonne menu_order. Sur un type de contenu personnalisé comme des « cuvées », il faut l’activer explicitement.

Trois étapes permettent d’obtenir un tri manuel complet : déclarer le support page-attributes à l’enregistrement du CPT, adapter les requêtes d’affichage pour trier sur menu_order, puis, en option, ajouter une interface de glisser-déposer pour éviter de saisir des nombres à la main.

Activer le support page-attributes

Ce support, historiquement réservé aux pages, ajoute la métabox « Attributs » contenant le champ numérique d’ordre. Il suffit de l’ajouter à la liste des supports lors de l’appel à register_post_type().

register_post_type( 'cuvee', array(
    'label'    => 'Cuvées',
    'public'   => true,
    'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
    'show_in_rest' => true,
) );

Une fois ce support ajouté, la métabox « Attributs » apparaît automatiquement dans l’écran d’édition, avec un simple champ numérique. Sur l’éditeur de blocs, le même champ se retrouve dans le panneau latéral, sous « Attributs de page ».

Trier les requêtes sur menu_order

Par défaut, WP_Query trie par date de publication décroissante. Pour respecter l’ordre manuel, il faut préciser explicitement les paramètres orderby et order.

L'essentiel à retenir : page-attributes ajoute la métabox d'ordre ; menu_order pilote le tri dans les requêtes ; Un glisser-déposer simple complète l'expérience
$cuvees = new WP_Query( array(
    'post_type'      => 'cuvee',
    'posts_per_page' => -1,
    'orderby'        => 'menu_order',
    'order'          => 'ASC',
) );

Sur une archive native (archive-cuvee.php), le même réglage peut être imposé sans toucher au template, via le hook pre_get_posts :

function domaine_tri_archive_cuvees( $query ) {
    if ( ! is_admin() && $query->is_main_query() && is_post_type_archive( 'cuvee' ) ) {
        $query->set( 'orderby', 'menu_order' );
        $query->set( 'order', 'ASC' );
    }
}
add_action( 'pre_get_posts', 'domaine_tri_archive_cuvees' );

Attribuer les valeurs initiales

Sur un contenu existant migré depuis une autre source, la colonne menu_order vaut généralement 0 pour tous les contenus, ce qui donne un tri incohérent au premier chargement. Un script ponctuel via WP-CLI permet d’initialiser les valeurs par lot, en s’appuyant par exemple sur l’ordre alphabétique de départ :

wp post list --post_type=cuvee --orderby=title --order=ASC --field=ID | \
  awk '{print NR-1, $0}' | while read ordre id; do
    wp post update "$id" --menu_order="$ordre"
done

Un glisser-déposer simple en JavaScript

Saisir un nombre pour chaque contenu reste fastidieux dès qu’il y en a plus d’une dizaine. Sur la liste des articles, WordPress inclut déjà la bibliothèque jQuery UI ; un script minimal branché sur list-table permet de réordonner par glisser-déposer et d’enregistrer via admin-ajax.php.

  • Rendre les lignes de la table triables avec jQuery( '#the-list' ).sortable().
  • À chaque relâchement, envoyer la nouvelle liste d’identifiants ordonnés à un point d’entrée AJAX personnalisé.
  • Ce point d’entrée met à jour menu_order pour chaque identifiant avec wp_update_post().
function domaine_enregistrer_ordre() {
    check_ajax_referer( 'domaine_ordre_cuvees' );
    $ids = array_map( 'absint', $_POST['ordre'] ?? array() );
    foreach ( $ids as $position => $id ) {
        wp_update_post( array( 'ID' => $id, 'menu_order' => $position ) );
    }
    wp_send_json_success();
}
add_action( 'wp_ajax_domaine_enregistrer_ordre', 'domaine_enregistrer_ordre' );

Pour un client qui réordonne souvent son contenu, le glisser-déposer change tout : la métabox numérique fonctionne, mais personne n’a envie de recalculer des dizaines de chiffres à la main après l’ajout d’une seule fiche.

En résumé

Le support page-attributes et la colonne menu_order forment un mécanisme de tri manuel disponible depuis toujours dans WordPress, trop souvent oublié parce qu’il était historiquement réservé aux pages. Sur un type de contenu personnalisé, ces trois étapes — support déclaré, requêtes adaptées, interface de tri — suffisent à donner un contrôle total au client sur l’ordre d’affichage de son contenu.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi