IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WordPress PHP Discussion :

Fonction d'affichage d'un menu


Sujet :

WordPress PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut Fonction d'affichage d'un menu
    Bonjour à tous.

    Je suis un peu nouveau dans le monde du développement wordpress, mais je connais bien le php.
    J'ai commencé par apprendre à créer des plugin et j'ai réussis à créer un plugin de short code et à en modifier plusieurs.

    Pour les besoins spécifique d'un site j'aimerais modifier l'affichage des menus.

    Avez vous des exemple simple d'appel de la fonction d'affichage d'un menu?
    Quelle est cette fonction ?


    Merci à tous.

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    vous parlez du menu de l'espace d'administration ou du menu des pages publiques ?

    indiquez-nous aussi un exemple de modification que vous souhaitez faire

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Bonjour,

    Je parle des menus que l'on peut creer via l'administration "apparence ->menus" et afficher via le widget fourni par word press "menu personnalisé" dans une sidebar.
    En fait je veux modifier le comportement de ce widget en créant un plugin permettant dans le cas d'un menu mixant catégory, lien, page, d'afficher le nombre de post d'une categorie et sous categorie.
    Mais je ne veux pas modifier le comportement pour mes autres menus affiché ailleurs.

  4. #4
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    c'est le même menu que vous souhaitez voir affiché différemment suivant qu'il se trouve dans le widget ou non ?

    je sais que les éléments du menu peuvent être modifiés avec le filtre "wp_get_nav_menu_items" mais ensuite je ne sais pas comment savoir si on est dans le widget

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Merci de vos réponses.

    Non c'est un menu spécifique.

    Sait tu où je pourrais trouver le code du widget de base "menus personnalisé" ?
    Je n'arrive pas à mettre la main dessus pour tenter de le modifier.

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    les codes des widgets sont dans "wp-includes/widgets"

    mais s'il s'agit d'un menu spécialement prévu pour ce widget, il est possible de tester par son code de menu par exemple comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
     
    add_filter("wp_get_nav_menu_items", function ($items, $menu, $args) {
     
        if (    is_admin()
            ||  ("code-du-menu" !== $menu->slug) // si ce n'est pas le menu concerné
        ) {
            return $items; // ne pas modifier ce menu
        }
     
     
        foreach ($items as $index => $i) {
     
            if ("taxonomy" !== $i->type) { // si ce n'est pas un élément taxinomie
                continue;
            }
     
    		// modification du texte affiché
            $items[$index]->title .= " (nombre)";
     
        }
     
     
        return $items;
     
    }, 10, 3);

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Merci,

    Je viens de dévouvrir en effet les filter hier soir.
    Je dois te dire que je suis perplexe sur le fonctionnement de ces choses

    J'ai trouvé la classe de creation du widget, j'ai trouvé qu'il appelait une fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wp_nav_menu( array( 'fallback_cb' => '', 'menu' => $nav_menu ) );
    qui se trouve dans la classe nav-menu-template (je suis encore en 3.9) qui est un walker

    J'ai découvert que le lien se faisait dans la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
    J'ai meme trouvé la ligne qui affichait le lien, mais je ne veux pas modifier le noyau je veux creer un plugin en utilisant au max les objets du noyau.

    J'ai effectivement vu plein d'appel de ce style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $atts = apply_filters( 'nav_menu_link_attributes', $atts, $item, $args );
    Mais la je seche je ne comprends pas le fonctionnement

  8. #8
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    ce sont les filtres et actions qui permettent de faire des modifications sans toucher au cœur de WordPress.
    avec "add_action" et "add_filter" qui seront codés dans des extensions, on peut accrocher (d'où le "hook" en anglais) du code à ces endroits
    https://developer.wordpress.org/refe...ns/add_action/
    https://developer.wordpress.org/refe...ns/add_filter/

    avec ces crochets dans la partie données et les thèmes pour la partie présentation, il est possible de complètement personnaliser son site. le jeu est de parcourir le code pour trouver le crochet le plus proche de la modification qu'on souhaite faire
    par exemple pour afficher le nombre d'article dans un widget, il est tout a fait possible de créer un nouveau widget et de refaire une présentation qui ressemble au résultat du widget menu. mais avec le code que j'ai mis dans mon message précédant, l'utilisation du filtre "wp_get_nav_menu_items" permet d'avoir le même résultat en utilisant moins de code et ça sera donc plus simple à maintenir

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    Merci pour l'explication,

    Mais du coup, ton code je le mets où dans ma classe plugin c'est ca que je n'arrive pas à comprendre.
    Et comment il est appelé?

    Désolé je suis un peu embetant mais j'ai du mal a voir la pile d'execution du code.

  10. #10
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    il n'y a pas besoin de faire une classe, l'appel à "add_action" peut se mettre directement dans le fichier principal de l'extension

    au chargement d'une page, toute les extensions sont appelées et donc par exemple ton extension. à ce moment, l'appel de "add_action" va stocker la fonction a appeler.
    ensuite plus tard dans le code, au moment de "do_action", WordPress regarde s'il y a des crochets correspondants et les exécute.

    pour la version plus détaillée de ce qui s'enchaine au chargement d'une page voilà une image qui fait un joli résumé, les extensions s'exécutant au moment de "active plugins"
    https://i.imgur.com/SqQQE.png

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    691
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 691
    Points : 362
    Points
    362
    Par défaut
    MErci pour tes explications,

    J'ai réussis a faire fonctionner ton code.

    Je t'avoue c'est pas exactement ce que je voulais, mais ca fonctionne déjà.

    J'ai bien réussis à créer mon widget et j'ai bien compris la condition d'affichage sur le slug du menu.
    Le hic c'est que je voulais en faire un plugin parceque j'ai 2 menus différents (pour l'instant) que j'ajoute dans ma side bar.
    Ensuite le nombre est dans le lien alors que je le voulais juste après.

    En cherchant plus loin j'ai vu il fallait faire son propre walker.

    Je vais voir ce WE pour améliorer le truc

  12. #12
    Membre expérimenté

    Homme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 049
    Points : 1 689
    Points
    1 689
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par zulot Voir le message
    Bonjour,

    Je parle des menus que l'on peut creer via l'administration "apparence ->menus" et afficher via le widget fourni par word press "menu personnalisé" dans une sidebar.
    En fait je veux modifier le comportement de ce widget en créant un plugin permettant dans le cas d'un menu mixant catégory, lien, page, d'afficher le nombre de post d'une categorie et sous categorie.
    Mais je ne veux pas modifier le comportement pour mes autres menus affiché ailleurs.
    C'est un peu compliqué quand on peut faire plus simple.
    Cela se fait automatiquement dans Wordpress (encore faut-il en connaitre le fonctionnement)
    Lorsqu'on met les posts dans des catégories et qu'on crée un nouveau widget (certains thèmes premium autorisent de créer de nouveaux emplacements de widgets), ce widget affiche les catégories avec leur nombre de posts...

Discussions similaires

  1. Fonction copier/coller avec un menu
    Par avogadro dans le forum Langage
    Réponses: 3
    Dernier message: 16/03/2006, 22h44
  2. [HTML/CSS] Affichage d'un menu
    Par leloup84 dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 24/02/2006, 11h51
  3. [Graphique] JFrame et affichage d'un menu
    Par mavina dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 25/11/2005, 20h18
  4. une fonction d'affichage à rajouter
    Par isidore dans le forum C++
    Réponses: 17
    Dernier message: 27/02/2005, 17h03
  5. Fonction d'affichage
    Par Mynautor dans le forum OpenGL
    Réponses: 2
    Dernier message: 31/05/2004, 11h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo