Simplicityの特徴 › フォーラム › 不具合報告 › 2.2.9以降、アコーディオンツリー モバイルメニューが表示されない
- このトピックには7件の返信、2人の参加者があり、最後に
hidekichiにより9年、 1ヶ月前に更新されました。
-
投稿者投稿
-
-
2016年9月27日 12:00 AM #45620
t.kizawa
ゲスト初めて質問します。失礼あればご容赦ください。
当サイトではモバイル用メニューをアコーディオンツリーとしておりますが、
本日2.2安定版⇒2.3安定版に更新したところモバイルメニューが表示されない状態となりました。現在までの切り分け状況は下記のとおりです。
・過去のバージョン 2.2.8迄は問題なく、2.2.9以降で発生している事象である
・完全レスポンシブの設定有無は関係ない
・メニュー形式を他(アコーディオン、モーダル)にした場合は表示されるWordPressのバージョンは 4.6.1–ja となります。
当方サイト https://kizawa.info確認すべき点をご教示いただければ幸いです。
よろしくお願いします。 -
2016年9月27日 12:56 AM #45624
technote
ゲスト私の環境では footer-slicknav.php を修正することで解決しました。
/js/jquery.slicknav.min.js" defer
=>
/js/jquery.slicknav.min.js" -
2016年9月27日 1:22 AM #45625
hidekichi
ゲスト他のトピックでjQuery lazyloadが動作しないと言うのがありまして、そこでスクリプトタグにdefer/asyncを入れる処理が入ったらしいのですが、一部deferの所がasyncに入って問題が発生すると言う質問がありました。
サイトを見せてもらったら、slickNav部分が読み込めてないんですけれども、おそらくはjQueryの読み込み順で問題が出ているように思います。
作業1) デフォルトに戻す作業
親テーマのfunctions.phpにて、おそらく最後のほうだろうと思いますが、
function defer_async_scripts( $tag, $handle, $src )こういう関数を見つけて、$async_scriptsの中に
'jquery-lazyload-js'があればそれをまずdeferの方へ移動します。これはひとまず予防のためです。$async_defer = array { //'jquery-core', }の中身を上記のようにコメントアウトして、
$defer_scripts = array( 'jquery', 'admin-bar', 'simplicity-js', 'simplicity-child-js', );などとして書き換えて試してみてください。通常jqueryは上記のハンドルでイケると思うんですけれども、もしかすると、$async_deferの中に書いてあるような書き方でないとダメなのかも知れません。ここらは試してもらうしか無いんですが、最悪、子テーマfunctions.phpで
remove_filter('script_loader_tag', 'defer_async_scripts', 10, 3 );と書けば、デフォルトになるかと思います。その後、
footer-slicknav.phpにて、
参考: ここもスクリプトタグの部分を書いてましたが投稿できないのでjsFiddleにて
と言う具合にdeferを取ります。これで元通りです。
作業2) 根本的な解決方法
slicknavは直でスクリプトタグで読み込んでいるので、ここを参考: htmlでもscriptタグが入っていると投稿できないのでjsFiddleにて
このようにしてコメントアウトして、子テーマfunctions.phpにて、
function addScript_slickNav() { if (is_mobile_menu_type_accordion_tree()) { wp_enqueue_style( 'slicknav-css', get_template_directory_uri() . '/css/slicknav.css'); wp_enqueue_script( 'slicknav-js', get_template_directory_uri() . '/js/jquery.slicknav.min.js', array( 'jquery' ), '20160927', true ); } } add_action('wp_enqueue_scripts', 'addScript_slickNav');これを追記します。こうすると、直接スクリプトを読むのではなく、jQueryが読み込まれてから読み込むようになります。かつ、設定で読み込むようになっている時だけ読み込みます。
この状態になっていれば、作業1でremove_filter等をせずとも、親テーマの関数部分で、$defer_scripts = array( 'jquery', 'admin-bar', 'simplicity-js', 'jquery-lazyload-js', 'simplicity-child-js', 'slicknav-js', //←ハンドル追加 //'crayon_js', );とすることでスクリプトタグにdeferを入れることが可能になり正常に動作すると思います。
-
2016年9月27日 7:19 AM #45631
わいひらキーマスターご報告ありがとうございます。
とりあえず、取り急ぎ修正した2.3.0eをアップしておきました。
https://wp-simplicity.com/downloads/downloads2/ -
2016年9月27日 10:34 AM #45640
hidekichi
ゲストfunction addScript_slickNav() { if (is_mobile() && is_mobile_menu_type_accordion_tree()) { wp_enqueue_style( 'slicknav-css', get_template_directory_uri() . '/css/slicknav.css'); wp_enqueue_script( 'slicknav-js', get_template_directory_uri() . '/js/jquery.slicknav.min.js', array( 'jquery' ), '20160927', true ); } } add_action('wp_enqueue_scripts', 'addScript_slickNav');作業2で書いた関数にちょっと追加・修正します。
おそらくモバイルの時と条件が必要かと思うので、モバイルでslicknavの設定があった時と言う条件にしました。
slicknavってモバイルの時だけですよね?で、footer-slicknav.phpの部分で以下のようにします。
//グローバルナビのCSSセレクタを指定する(function($){ $(function(){ $('#navi .menu > ul, #navi ul.menu').slicknav({ label: 'MENU', allowParentLinks: true, }); }); })(jQuery);つまり、document.readyを待ってから実行です。これがないといつslicknavが動作するかは不明になり、だいたいの場合はjqueryより先に読み込んでエラーが出ます。
ややこしくなってきたのでまとめ。
footer-slicknav.phpでは、
・直接スクリプトタグで読み込んでいるのをコメントアウト
・slicknavを設定するjQuery部分にdocument.readyの指定を入れる
このすぐ上のスクリプトのようにする。
document.readyは$(function(){…})と略して書けます。子テーマfunctions.phpでは、
・footer-slicknav.phpで直で読んでいた本体をwp_enqueue_scriptでjqueryの後で読み込むようにする
・これらはモバイルの時だけ読み込むようにする
このレス一番はじめの関数 -
2016年9月27日 11:10 AM #45646
t.kizawa
ゲストわいひらさん、hidekichiさん、technoteさん
早速のご回答、ご対応ありがとうございました!
取り急ぎ、最新2.3.0gにて解消していることを確認しました。hidekichiさんの修正案は追って確認したいと思います。
ありがとうございました。 -
2016年9月27日 11:56 AM #45648
わいひらキーマスター動作報告ありがとうございます!
他環境でも、ちゃんと動作しているのがわかり、助かります。 -
2016年9月27日 12:52 PM #45651
hidekichi
ゲストfooter-slicknav.phpを #45640 のようにした場合、jqueryの設定のその上にある
if ( is_mobile_menu_type_accordion_tree() ): //アコーディオンツリーメニューの時?> // ↓ のように書き換える if ( is_mobile() && is_mobile_menu_type_accordion_tree() ): //アコーディオンツリーメニューの時?>必要があるのに気がついてしまいました。
-
-
投稿者投稿
- このトピックに返信するにはログインが必要です。