[Résolu] Problème pour créer un hook sur Twenty Twenty-three (Créer un compte)

  • WordPress :6.3
  • Statut : résolu
5 sujets de 1 à 5 (sur un total de 5)
  • Auteur
    Messages
  • #2462798
    PatB04
    Participant
    Initié WordPress
    3 contributions

    Bonjour,

    Ma configuration WP actuelle

    • Version de PHP/MySQL : 7.4.33 / 5.2.0
    • Thème utilisé : Twenty Twenty-three avec un thème enfant
    • Extensions en place : CF7
    • Nom de l’hébergeur : localhost
    • Adresse du site : —

    Problème rencontré : J’essaie de faire un hook pour afficher un élément de menu seulement lorsque l’utilisateur est connecté.

    J’ai donc une fonction de ce style :

    function masquer_element_admin_non_connecte($items, $args) {
    if ($args->theme_location == 'navigation') {
    if (is_user_logged_in()) {
    $items .= '<li><a href="#">admin</a></li>';
    }
    }
    return $items;
    }
    add_filter('wp_nav_menu_items', 'masquer_element_admin_non_connecte', 10, 2);
    functions

    Le problème c’est que l’argument « primary » fonctionne bien avec Astra, mais que je ne trouve pas quel argument mettre pour afficher cet item dans ma barre de navigation avec le thème TT3. J’ai essayé « navigation », « main-menu », …, mais rien ne fonctionne.
    J’ai créé ma page et mes menus uniquement avec Gutenberg et personnalisés aves CSS.

    Merci pour votre aide car là je suis perdu…

    • Ce sujet a été modifié le il y a 6 mois et 3 semaines par PatB04.
    #2462814
    ferman
    Participant
    Maître WordPress
    6992 contributions

    Bonjour,

    Le thème twentytwentythree est spécial (entièrement tourné vers le FSE). Pas de customizer, pas de fonction.php (mais les thèmes enfant en ont), es hooks valables avec les thèmes classiques ne le sont pas avec 2023. En particulier, il n’y a pas de wp_nav_menu_items et à ma connaissance les solutions classiques (PHP) pour enlever ou ajouter des éléments au menu ne sont pas applicables. Dans mon cas, pour résoudre ce problème, je passe par le Javascript et le hook wp_footer qui, lui, reste utilisable. Dans votre cas, ça donne:

    function remove_menu_item(){
    if (!is_user_logged_in()) {?>
    <script>
    document.querySelectorAll('.wp-block-group .wp-block-navigation-item')[3].remove()
    </script>
    <?php }
    }
    add_action('wp_footer', 'remove_menu_item');

    Il faut repérer l’ordre de l’élément de menu à enlever en partant de [0]  (dans le code ci-dessus [3] donc le quatrième élément du menu).

    J’espère que ça pourra vous être utile. Il y a sans doute d’autres méthodes avec la méthode

    #2462820
    PatB04
    Participant
    Initié WordPress
    3 contributions

    Merci beaucoup pour toutes ces explications et ce code qui fonctionne bien.
    J’ai bien fait un thème enfant et c’est ce thème qui est activé. Du coup est-il possible de faire quelque chose en php ou non ? (Pardon pour ces questions parfois basiques, mais je débute…)

    • Cette réponse a été modifiée le il y a 6 mois et 3 semaines par PatB04.
    #2462849
    ferman
    Participant
    Maître WordPress
    6992 contributions

    Du coup est-il possible de faire quelque chose en php ou non ? (Pardon pour ces questions parfois basiques, mais je débute…)

    Avec twentytwentythree, qui n’est pas un thème conçu comme les thèmes plus classiques, il faut oublier certaines méthodes basées sur le php (donc, j’évite ce thème). Pour beaucoup de choses, on peut utiliser du javascript (en front-end). Idéalement on peut utiliser React pour travailler en back-end mais c’est un tout autre monde que je connais très mal.

    Cependant, comme on travaille avec Gutenberg, on peut toujours utiliser le php pour pas mal de choses: charger des feuilles de style ou des fichiers js, faire des boucles de recherche, afficher ou non des blocs selon leur fonction et selon le rôle  de l’utilisateur…etc. Pour cela on dispose essentiellement de blocks shortcode .

     

    #2462856
    PatB04
    Participant
    Initié WordPress
    3 contributions

    Merci beaucoup pour toutes ces explications.

5 sujets de 1 à 5 (sur un total de 5)
  • Vous devez être connecté pour répondre à ce sujet.