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

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

ただいまの
回答率

90.99%

  • WordPress

    6016questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

WP twentyseventeen 子テーマ作成後、カスタムメニューを追加しても表示されません。

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 234

YuriY

score 11

twentyseventeenのテーマから子テーマを作成しWPのサイトを作成しています。

今回フッター部分にメニューを設置するため、子テーマを修正しましたが、
フッター部にメニューが表示されません。

twentyseventeen-child/functions.php

// フッター部メニュー追加
register_nav_menus( array(
    'fmenu'    => __( 'フッターメニュー', 'twentyseventeen' ),
) );

twentyseventeen-child/template-parts/footer/site-info.php

<div class="footer">
<?php wp_nav_menu( array(
    'theme_location'=> 'fmenu', 
    'container'     => '', 
    'menu_class'    => '',
    'items_wrap'    => '<ul id="fmenu">%3$s</ul>'));
?>
</div>

管理画面->外観->メニュー

メニュー名 fmenu

メニューを追加

メニュー設定をフッターメニュー選択


イメージ説明

上記のように設定しましたが、公開画面上に表示されません。
何か作業漏れなどありますでしょうか?
ご存知の方よろしくお願いいたします。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • 退会済みユーザー

    退会済みユーザー

    2017/10/19 12:24

    フッターですか?ヘッターですか?ヘッダーでしょうか?画面上とは、管理画面または公開画面のどちらのことですか?

    キャンセル

  • YuriY

    2017/10/19 12:26

    footerです!ヘッダーと書いてる部分ありますね><申し訳ありません。表示されないのは公開画面です。

    キャンセル

  • dit.

    2017/10/19 13:22

    誤)fanction.php → 正)functions.php

    キャンセル

  • YuriY

    2017/10/19 14:09

    正)functions.phpに修正しました。指摘ありがとうございます。

    キャンセル

回答 3

+2

以下の作業でテストしました。

新規のWordPressを用意。
themeディレクトリ直下に「twentyseventeen-child」ディレクトリを用意。
style.cssとfunctions.phpを入れる。

style.css

/*
 Theme Name:   Twentyseventeenchild
 Template:     twentyseventeen
*/

functions.php

<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}


// フッター部メニュー追加
register_nav_menus( array(
    'fmenu'    => __( 'フッターメニュー', 'twentyseventeen' ),
) );

子テーマを有効化する。

メニューの設定
管理画面-外観-メニュー
新規メニューを作成
メニュー名 fmenu
メニューにホームとサンプルページを追加
メニューの位置 フッターメニュー
でメニューを保存

site-info.php を作成
(twentyseventeen-child/template-parts/footer/)

<div class="footer">
<?php wp_nav_menu( array(
'theme_location'=> 'fmenu', 
'container' => '', 
'menu_class' => '',
'items_wrap' => '<ul id="fmenu">%3$s</ul>'));
?>
</div>

<div class="site-info">
<span>copyright &copy; <?php echo date('Y'); ?> <?php bloginfo('name'); ?>, All Right Reserved</span>
</div><!-- .site-info -->

ここまででcopyrightのすぐ上に、設定したフッター用メニューが表示されました。
functions.phpのメニュー追加部分やsite-info.phpは質問者様の提示のコードです。
特に問題なく設置できましたので、他の要因があるかもしれません。

プラグインの停止、もう一度子テーマを作り直してみるなども検討してください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/20 14:39

    作り直して作成したところ正常に表示されましたが、既存のソースで何が問題か調査しました。

    wp-includes/nav-menu-template.php
    をトレースしたところ、

    TOPのグローバルメニューに検索用のフォーム窓を追加する処理をfunctions.phpに記載していたのですが、このフィルターの追加によってフッターメニューが表示できない状態でした。

    add_filter( 'wp_nav_menu_items', 'add_search_box_to_menu', 10, 2);
    function add_search_box_to_menu( $items, $args ) {
    if( $args->theme_location == 'top' ){
    return $items . '<li>' . get_search_form(false) . '</li>';
    }
    }

    topというメニュー以外は、NULLでリターンしており、これのせいでNULLデータに書き換わってしまっていました。

    そのため、

    add_filter( 'wp_nav_menu_items', 'add_search_box_to_menu', 10, 2);
    function add_search_box_to_menu( $items, $args ) {
    if( $args->theme_location == 'top' ){
    return $items . '<li>' . get_search_form(false) . '</li>';
    }else{
    return $items;
    }
    }

    top以外は、通常のデータを出力するようにしたところ、正常にメニューがフッターに表示されました!
    ありがとうございます。

    キャンセル

  • 2017/10/20 14:50

    作り直し&原因究明お疲れ様でした。
    無事に解決されたようでよかったです。

    キャンセル

  • 2017/10/20 16:18

    ありがとうございます!

    キャンセル

0

内容は問題無いと思うのでsite-info.phpの編集が適用、反映されているかどうかだけではないでしょうか。
site-info.phpに何かしら適当な文字を入れてサイト上で表示されますか?
キャッシュと合わせてその辺り確認してみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/10/19 12:40

    <?php
    /**
    * Displays footer site info
    *
    * @package WordPress
    * @subpackage Twenty_Seventeen
    * @since 1.0
    * @version 1.0
    */

    ?>

    <div class="footer">
    <?php wp_nav_menu( array(
    'theme_location'=> 'fmenu',
    'container' => '',
    'menu_class' => '',
    'items_wrap' => '<ul id="fmenu">%3$s</ul>'));
    ?>
    </div>

    <div class="site-info">
    <span>copyright &copy; <?php echo date('Y'); ?> <?php bloginfo('name'); ?>, All Right Reserved</span>
    </div><!-- .site-info -->

    site-info.phpの中身です。

    <div class="site-info">
    </div>
    の部分は表示されています。

    キャンセル

  • 2017/10/19 12:47

    テンプレートのコードは要りませんが、例えばそのテンプレートからcopyrightを消すとフロントエンドでも消えますか?

    キャンセル

  • 2017/10/19 12:48

    消えます。
    毎回表示は強制リロードするようにしています。

    キャンセル

  • 2017/10/19 12:50

    現在 fmenu以外に
    gnavというメニューを作成して(デフォルトで用意されていたメニューです。)ヘッダー部に表示させているのですが、そちらは正常に表示されています。

    キャンセル

  • 2017/10/19 13:44 編集

    このテンプレート名は正しいですか?
    fanction.php

    functions.phpではないですか?

    考えられる原因は
    fmenuにまだ何もページが追加されてない
    キャッシュ系のプラグインによるキャッシュの影響
    編集するテンプレートが間違っている

    キャンセル

  • 2017/10/19 14:13

    実際のファイル名が正しいのかどうか確認した方が良いでは?
    functions.phpで、a ではなく u です。
    状況が見えないのでその程度のアドバイスしか出来ません。

    キャンセル

  • 2017/10/19 14:14

    ファイル名が記載ミスでした。 正)functions.phpです。

    キャッシュ系のプラグインは特にインストールしていません。

    テンプレートは
    <div class="footer">
    <?php wp_nav_menu( array(
    'theme_location'=> 'fmenu',
    'container' => '',
    'menu_class' => '',
    'items_wrap' => '<ul id="fmenu">%3$s</ul>'));
    ?>
    </div>
    記述したとき、<div>の部分だけは表示されているので、関数を呼び出したもののnullか何かで帰ってきているのだと思います。

    何もページが追加されていないということですが、
    存在する固定ページを指定していますが、うまくいかないようです。

    キャンセル

  • 2017/10/19 14:20

    functions.php になっています。

    キャンセル

  • 2017/10/19 14:29

    最初に書いた通り作業されてる内容自体に問題は無いようなので、あくまで可能性の一つとして考えました。

    ならばデバッグモードで何かエラーが無いか確認してみてください。

    キャンセル

  • 2017/10/19 15:14 編集

    ありがとうございます。デバッグモードでもエラーはありませんでした。
    親テーマのfunctions.phpをすべてコピーせず差分だけを子テーマに持って行って編集してfunctions.phpを作成したのですが、もしかしてその方法がまずかったりしますでしょうか?

    キャンセル

  • 2017/10/19 15:42

    ファイルは最低限
    style.css
    functions.php
    この2つがあれば問題ないので関係ないです。

    プラグインをインストールしているなら全て停止してみてください。

    キャンセル

check解決した方法

-1

作り直して作成したところ正常に表示されましたが、既存のソースで何が問題か調査しました。

wp-includes/nav-menu-template.php
をトレースしたところ、

TOPのグローバルメニューに検索用のフォーム窓を追加する処理をfunctions.phpに記載していたのですが、このフィルターの追加によってフッターメニューが表示できない状態でした。

add_filter( 'wp_nav_menu_items', 'add_search_box_to_menu', 10, 2);
function add_search_box_to_menu( $items, $args ) {
if( $args->theme_location == 'top' ){
return $items . '<li>' . get_search_form(false) . '</li>';
}
}

topというメニュー以外は、NULLでリターンしており、これのせいでNULLデータに書き換わってしまっていました。

そのため、

add_filter( 'wp_nav_menu_items', 'add_search_box_to_menu', 10, 2);
function add_search_box_to_menu( $items, $args ) {
if( $args->theme_location == 'top' ){
return $items . '<li>' . get_search_form(false) . '</li>';
}else{
return $items;
}
}

top以外は、通常のデータを出力するようにしたところ、正常にメニューがフッターに表示されました!
ありがとうございます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • WordPress

    6016questions

    WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。