web-dev-qa-db-ja.com

Wordpressの子テーマが/inc/structure/header.phpの親ナビゲーションメニューを上書きできない

私はかなりWordpressが初めてです。私はデフォルトのナビゲーションメニューがあるshop-isleテーマを使っています。私はこれを空想の「Ubermenu」プラグインで上書きしようとしていますが、デフォルトの折りたたみ記号がプラグインを上書きし続けます。

テーマヘッダはshop-isle/inc/structure/header.phpディレクトリからロードされます。

ディレクトリ全体を自分の子テーマディレクトリにコピーし、以下の/header.phpで編集しましたが、それを子ではなく親テーマの「構造」フォルダに追加した場合にのみ機能します。

例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; ?>

ヘッダーをロードするが、ヘッダーをまとめて削除する関数のフックを解除しようとしました。

メインのheader.phpはshop-isle/inc/structure/header.php.を呼び出します。

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

shop-isle/inc/structure/hooks.phpにあるhooks.phpは、以下を使用して登録されたコールバック関数を持ちます。

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

私はすべてのファイルを自分の子テーマにコピーし、ディレクトリ構造を同じままにしましたが、それは親ファイルを上書きしません。

'shop-isle/inc/structure/header.php'を更新するために、私の子供のテーマの 'functions.php'に上記のコード(例1)を追加するにはどうすればいいですか?

1
Haydn Kwan

あなたはあなたの子供にコピーして、ファイルが含まれる場所へのパスを変更するためにおそらく「shop_isle_primary_navigation」、ファイルが含まれている機能を編集する必要があります。 Wordpressは子からデフォルトファイルのみを自動的にロードします。それはテンプレート階層で定義されたものです。あなたはこれについてもっと読むことができます https://developer.wordpress.org/themes/basics/template-hierarchy/

1
Alex Sancho

あなたがそれらをあなたの子供のテーマに追加することによって任意のテーマファイルを置き換えることはできません。これは テンプレート階層 および親テーマが明示的に置き換えることを許可しているファイル内のファイルに対してのみ機能します。子供のテーマがどのように機能するかについての詳細は、 最近の同様の質問に対する私の答え を参照してください。

テーマの作者に連絡する必要があることの正確な方法を理解するには、これまでに投稿した内容に基づいて、最初に remove_action() を使用して元のナビゲーションをヘッダーから削除する必要があるフックするために元々使用されていたものと同じ引数を使用します。

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

それからあなたの子供のテーマではあなたが望むものをヘッダに出力する new 関数をあなたの子供のテーマのfunctions.phpファイルに作成する必要があります:

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;
}

それからオリジナルの代わりにそれをフックします。

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