web-dev-qa-db-fra.com

Le thème enfant Wordpress ne parvient pas à remplacer le menu de navigation parent dans /inc/structure/header.php

Je suis assez nouveau sur Wordpress. J'utilise le thème shop-isle qui a un menu de navigation par défaut. J'essaie de remplacer ceci par un plugin "Ubermenu" sophistiqué, mais le symbole de réduction par défaut continue de surcharger le plugin.

L'en-tête du thème est chargé à partir du répertoire shop-isle/inc/structure/header.php.

J'ai copié l'intégralité du répertoire dans mon répertoire de thème enfant et fait modifier ci-dessous dans /header.php, mais cela ne fonctionne que si je l'ajoute au dossier 'structure' du thème parent, PAS l'enfant.

exemple 1

<?php if( function_exists( ‘ubermenu’ ) ): ?>
  <?php ubermenu( 'main' , array( 'theme_location' => 'primary' ) ); ?>
<?php else: ?>
      <div class="header-menu-wrap">
        <div class="collapse navbar-collapse" id="custom-collapse">
          <?php
            wp_nav_menu(
                 array(
                    'theme_location' => 'primary',
                    'container'      => false,
                    'menu_class'     => 'nav navbar-nav navbar-right',
                       )
                    );
                        ?>
                 </div>
              </div>
<?php endif; ?>

J'ai essayé de décrocher la fonction qui charge l'en-tête mais qui l'enlève tout à la fois!

Le principal header.php appelle shop-isle/inc/structure/header.php. en utilisant

<?php do_action( 'shop_isle_header' ); ?>

Le hooks.php situé dans shop-isle/inc/structure/hooks.php a la fonction de rappel enregistrée en utilisant

add_action( 'shop_isle_header', 'shop_isle_primary_navigation',   50 );

J'ai copié tous les fichiers sur mon thème enfant et conservé la même structure de répertoires, mais elle ne remplace pas les fichiers parents.

Comment puis-je ajouter le code ci-dessus (exemple 1) dans 'functions.php' dans mon thème enfant pour mettre à jour 'shop-isle/inc/structure/header.php'?

1
Haydn Kwan

Vous devez copier sur votre enfant et modifier la fonction contenant le fichier, probablement "shop_isle_primary_navigation", pour changer le chemin où se trouve le fichier. Wordpress ne charge automatiquement à partir de l'enfant que les fichiers par défaut, c'est-à-dire ceux définis dans la hiérarchie des modèles. Vous pouvez en savoir plus à ce sujet sur https://developer.wordpress.org/themes/basics/template-hierarchy/

1
Alex Sancho

Vous ne pouvez pas remplacer des fichiers de thème arbitraires en les ajoutant à votre thème enfant. Cela ne fonctionnera que pour les fichiers de la hiérarchie des modèles et les fichiers que le thème parent a explicitement permis de remplacer. Veuillez consulter ma réponse à une question récente similaire pour en savoir plus sur le fonctionnement des thèmes enfants.

Pour savoir exactement comment faire ce que vous voulez, vous devez contacter l'auteur du thème, mais sur la base de ce que vous avez posté jusqu'à présent, il est possible de dire que vous devez d'abord supprimer la navigation d'origine de l'en-tête en utilisant remove_action() avec les mêmes arguments utilisés à l'origine pour l'accrocher:

remove_action( 'shop_isle_header', 'shop_isle_primary_navigation', 50 );

Ensuite, dans votre thème enfant, vous devez créer une fonction new dans le fichier functions.php de votre thème enfant, qui renvoie l'en-tête que vous souhaitez:

function wpse_309907_primary_navigation() {
    if ( function_exists( ‘ubermenu’ ) ): ?>
        <?php ubermenu( 'main' , array( 'theme_location' => 'primary' ) ); ?>
    <?php else: ?>
        <div class="header-menu-wrap">
            <div class="collapse navbar-collapse" id="custom-collapse">
                <?php
                wp_nav_menu(
                array(
                'theme_location' => 'primary',
                'container'      => false,
                'menu_class'     => 'nav navbar-nav navbar-right',
                )
                );
                ?>
            </div>
        </div>
    <?php endif;
}

Puis accrochez-le à la place de l'original:

add_action( 'shop_isle_header', 'wpse_309907_primary_navigation', 50 );
0
Jacob Peattie