web-dev-qa-db-fra.com

Triez wp_nav_menu () par ordre de menu

J'ai créé un gestionnaire de menu personnalisé pour le back-end, triant le par glisser-déposer en fonction de Ordre des pages CMS .

Le problème maintenant est qu'il semble qu'il ne soit pas possible de trier wp_nav_menu autrement que par défaut, cela peut-il être vraiment vrai?

1
INT

Les nav_menu_items sont déjà triés par menu_order.

Lorsque vous accédez à Apparence -> Menus et modifiez le menu de commande, l’ordre menu_order de chaque élément de menu est mis à jour.

Pour modifier le paramètre orderby dans la requête qui affiche le menu, vous pouvez utiliser pre_get_posts pour le modifier. Exemple:

add_action( 'pre_get_posts', 'wpse_sort_nav' );
function wpse_sort_nav( $query ) {
        if ( $query->is_main_query() && get_query_var( 'post_type' ) == 'nav_menu_item' )
            $query->set( 'orderby', 'ID' );
    }

ID et menu_order sont vos seules options réelles pour trier à l'aide de la table de publication par défaut. Il n'y a pas de titre et le post_name est le même que l'ID.

Vous pouvez ajouter des paramètres supplémentaires au filtre pre_get_posts en utilisant les métadonnées stockées avec chaque nav_menu_item.

Métadonnées du menu de navigation:

_menu_item_menu_item_parent
_ menu_item_type
_ menu_item_object_id
_ menu_item_object
_ menu_item_target
_ menu_item_classes _menu_item_xfn
_ menu_item_url

6
Chris_O