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

Publié par Jean-Michel le

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 cela avec un plugin ‘Ubermenu’ sophistiqué mais le symbole d’effondrement par défaut continue de remplacer le plugin.

L’en-tête du thème est chargé depuis le répertoire shop-isle/inc/structure/header.php.

J’ai copié l’intégralité du répertoire dans le répertoire de mon thème enfant et j’ai modifié ci-dessous dans /header.php mais cela ne fonctionne que lorsque je l’ajoute au dossier ‘structure’ dans le 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 supprime l’en-tête tous ensemble !

Lire également:  Wordpress : Obtenir les options de la base de données à l'aide de la classe php

Les principaux appels header.php shop-isle/inc/structure/header.php.
utilisant

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

Le hooks.php situé dans shop-isle/inc/structure/hooks.phpa 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 j’ai conservé la même structure de répertoires, mais cela ne remplace pas les fichiers parents.

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

Solution n°1 trouvée

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 dont le thème parent a explicitement autorisé le remplacement. Veuillez consulter ma réponse à une question récente similaire pour en savoir plus sur le fonctionnement des thèmes enfants.

Lire également:  Quel est le fichier standard pour créer un widget personnalisé dans les thèmes Wordpress ?

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 publié 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 à l’origine utilisé pour l’accrocher:

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

Ensuite, dans votre thème enfant, vous devez créer une nouvelle fonction dans le fichier functions.php de votre thème enfant qui affiche l’en-tête comme vous le 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;
}

Accrochez-le ensuite à la place de l’original :

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

Solution n°2 trouvée

Vous devez copier sur votre enfant et modifier la fonction où le fichier est inclus, 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/

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *