web-dev-qa-db-fra.com

Comment compter les éléments du menu de navigation?

Je crée un lecteur personnalisé pour mon menu de navigation. Le but est de diviser le menu en colonnes comme suit:

enter image description here

Je peux facilement déterminer où je suis dans la liste en regardant $item->menu_order. Ce que je ne sais pas, c'est combien d'éléments sont dans le total du menu.

Comment puis-je comprendre cela de l'intérieur du marcheur?

Mis à jour:

Je me rends compte qu'il existe plusieurs autres moyens de créer des colonnes. Tous ont cependant leurs inconvénients:

  1. Flotteurs CSS. Comme suggéré ci-dessous par @sagive, ceci pourrait être accompli en faisant flotter tous les éléments de la liste. Le problème est que la liste change d'ordre. Au lieu de descendre dans la première colonne, puis de passer à la deuxième, la liste parcourrait les quatre colonnes de la première ligne, puis les quatre colonnes de la deuxième. Cela gâche la commande.

  2. Colonnes CSS. Ceci est presque la solution parfaite. Cela me donnera exactement ce que je veux - sauf que IE ne le fait pas du tout. Même sur IE 9. Cela le rend inutilisable pour un site Web traditionnel.

  3. jQuery. Avec du javascript côté client, je pourrais modifier la liste et la mettre en page comme je le souhaitais. C'est désordonné cependant, et ça casse pour les personnes qui ont un handicapé.

  4. PHP. C'est la méthode que je vous pose dans cette question. Je divise la liste en quatre listes non ordonnées distinctes, les dump en HTML, puis j'utilise CSS pour faire flotter les listes afin de créer quatre colonnes distinctes. Produire en PHP peut être délicat, mais le résultat est le même pour tous les navigateurs. Cela en fait la meilleure option, je crois.

Solution:

Pour ceux qui peuvent suivre, voici le code que j'ai finalement utilisé pour obtenir la réponse:

// The menu handle from the register_nav_menu statement in functions.php
$theme_location = 'my-menu-handle';

$theme_locations = get_nav_menu_locations();

$menu_obj = get_term( $theme_locations[$theme_location], 'nav_menu' );

// Echo count of items in menu
echo $menu_obj->count;
7
Axeva

Appelez wp_get_nav_menu_object pour obtenir un objet de menu, qui vous donnera le nombre d'éléments pour ce menu.

Exemple:

// Get menu object
$my_menu = wp_get_nav_menu_object( 'your-menu-name-or-slug' );

// Echo count of items in menu
echo $my_menu->count;

J'espère que cela pourra aider.

11
t31os

Ne pensez-vous pas (et désolé si je suis impoli) que c'est beaucoup plus simple et plus facile
simplement flotter: à gauche; tous les "li" et les mettre dans une div avec ça
structure en arrière-plan comme une image ??

Exemple:

<style type="text/css">
.fourPartMenu {

    border: 1px solid #444;
    width: 800px;
    padding: 10px 15px;
}

.fourPartMenu ul {
    list-style: circle; // replace with your img
    padding: 0px;
    margin: 0px;
}

.fourPartMenu ul li {
    float: left;
    width: 190px;
}

</style>

<div class="fourPartMenu">
    <ul>
        <li><a href="#">One</a></li>
        <li><a href="#">Two</a></li>
        <li><a href="#">Three</a></li>
        <li><a href="#">Four</a></li>
        <li><a href="#">Five</a></li>
        <li><a href="#">Six</a></li>
        <li><a href="#">Seven</a></li>
        <li><a href="#">Eight</a></li>
        <li><a href="#">Nine</a></li>
        <li><a href="#">Ten</a></li>
    </ul>
</div>

Je pense que ce serait beaucoup plus facile à mettre en œuvre - mais .. je sais que pas exactement ce que vous voulez après une nouvelle vue aide parfois :)

0
Sagive SEO

Je sais que vous avez déjà trouvé une solution et je ne sais pas si c'est exactement ce que vous recherchez, mais j'ai écrit un plugin il y a quelque temps à utiliser sur le site d'un client et il crée des classes pour chaque menu, sous-menu. menu et élément de menu. C'est ce qu'on appelle les menus de navigation avancée. Si vous finissez par l'utiliser, n'hésitez pas à m'envoyer des demandes de fonctionnalités.

0
Caio Costa

Pourquoi ne pas simplement utiliser la fonction array_chunk () ?

En supposant que vous ayez créé un tableau de balises <li> finies, votre code à scinder et afficher devrait ressembler à ceci:

$columns = array_chunk( $myArray, 4 );
foreach ( $columns as $column ) {
    echo '<li>' . $column . '</ul>';
}
0
M. Sage