質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.77%

複数ヘッダーを切り替えたい(php部分的に呼び込み)

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,532

koro703

score 29

wordpressで、複数のヘッダーをページによって切り替えたいと考えています。
・共通ヘッダーのみ
・共通ヘッダー+可変ヘッダー01
・共通ヘッダー+可変ヘッダー02

可変ヘッダーの場合構造的には、下記のようになります。

|共通ヘッダー(header.php)|
|可変ヘッダー(header-01.php)|
|共通ヘッダー(header.php)|

可変ヘッダーが共通ヘッダーの間でなければ、

<?php get_header(); ?>
<?php get_header(01); ?>


のように出来ると思うのですが、
どうしても間に可変ヘッダーを入れないとレイアウトが崩れてしまいます。

共通ヘッダーを2つに分けて、可変ヘッダー+共通ヘッダー(下部)「header-01.php」
とすることも考えたのですが、可変ヘッダーがifの間に挟まっているため、
エラーが出てしまいます。

<?php if ( has_nav_menu( 'top' ) ) : ?>
<div class="navi-top">

<!-- 可変ヘッダー -->  
<?php get_template_part( 'template-parts/header/submenu', '01' ); ?>    
<!-- end 可変 -->

</div><!-- .navi-top -->
<?php endif; ?>

header.phpを更新すると他の部分も変更になるのが理想的なのですが、
何か良い方法はありますでしょうか?

<追記>

分解する前のheaderは下記の通りです。
真ん中あたりにある「可変ヘッダー」部分のパターンがいくつかあり、
変更になるページと必要ないページがあります。
複数あるので、header共通部分を都度変更するのは抜けるのがこわいので、
分解すると更新などが確実になるのでは…と希望しています。

<!-- 共通ヘッダ(前半)-->
<?php

?>
<html>
<head>

<?php wp_head(); ?>

</head>

<body <?php body_class(); ?>>
<div id="page" class="site">
<a class="skip-link screen-reader-text" href="#content"><?php _e( 'Skip to content', 'twentyseventeen' ); ?></a>

<header id="masthead" class="site-header" role="banner">

<?php get_template_part( 'template-parts/header/header', 'image' ); ?>

<?php if ( has_nav_menu( 'top' ) ) : ?>
<div class="navigation-top">
<div class="wrap">
<?php get_template_part( 'template-parts/navigation/navigation', 'top' ); ?>
</div><!-- .wrap -->
<!-- end 共通ヘッダ(前半)-->

<!-- 可変ヘッダ-->
<?php get_template_part( 'template-parts/header/submenu', 'product' ); ?>
<!-- end 可変ヘッダ-->

<!-- 共通ヘッダ(後半)-->
</div><!-- .navigation-top -->
<?php endif; ?>

</header><!-- #masthead -->

<!-- パンくず -->  
<?php get_template_part( 'template-parts/navigation/navigation', 'pankuzu' ); ?>


<div class="site-content-contain">
<div id="content" class="site-content">

<!-- end 共通ヘッダ(後半)-->

使用テーマ:twenty-seventeen

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

koro703さんが悩んでいるところを適切に把握できていないかもしれませんが、以下のようにするのではだめなのでしょうか。

  • header-common-top.php (共通ヘッダー上部)
  • header-common-bottom.php (共通ヘッダー下部)
  • header-01.php (可変ヘッダー1)
get_header('common-top');
get_header('01');
get_header('common-bottom');

質問文の以下の部分が理解できていないので、的外れな回答だったら申し訳ないです。
よろしければ、下記を試した場合どのようなエラーが出たのかも追記していただけますか。

共通ヘッダーを2つに分けて、可変ヘッダー+共通ヘッダー(下部)「header-01.php」
とすることも考えたのですが、可変ヘッダーがifの間に挟まっているため、
エラーが出てしまいます。


追記
各ファイルを以下のようにしてはいかがでしょうか。

// header-common-top.php
<?php if ( has_nav_menu( 'top' ) ) : ?>
<div class="navigation-top">
<div class="wrap">
<?php get_template_part( 'template-parts/navigation/navigation', 'top' ); ?>
</div><!-- .wrap -->
<?php endif; ?> 
// header-01.php
<?php get_template_part( 'template-parts/header/submenu', 'product' ); ?>
// header-common-bottom.php
<?php if ( has_nav_menu( 'top' ) ) : ?>
</div><!-- .navigation-top -->
<?php endif; ?>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/08/17 12:13

    Parse error: syntax error, unexpected 'endif' (T_ENDIF) in URL/header-01.php on line 4

    上記のようなエラーが出ます。
    <?php if ( has_nav_menu( 'top' ) ) : ?>の終了<?php endif; ?>を可変ヘッダーの下/共通ヘッダー(下部)の上と入れる場所を変えてもその部分がエラーになるため、それが原因だとは思うのですが……。
    可変ヘッダーはnavi-topやmenu-topの外には出せないので、何か良い方法は無いでしょうか?

    キャンセル

  • 2017/08/17 20:45

    endifの位置を変えても同じ位置にエラーが発生するということは、header-01.phpの記述自体に文法エラーがあるということはないでしょうか。
    よろしければ、header-01.phpなどの関係するPHPファイルの内容も質問文に記載していただけますか。

    キャンセル

  • 2017/08/18 13:37

    ありがとうございます。
    分割する前のheaderを追記載してみましたので、宜しくお願い致します。

    キャンセル

  • 2017/08/22 15:50

    mizさん
    ありがとうございます!!!!
    きちんと思い通りに出来ました!
    やりたい事のイメージをなかなか実現できなかったので、とても助かりました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る