前提・実現したいこと
初めて質問させていただきます。
取引先様が作成した、Pjax(Barba.js)を採用し表示速度を速めたWordPressオリジナルテーマがあります。
私はそのテーマを使ったWebサイトの修正を行っています。
修正の内容としては、「今は静止画のTOPページキービジュアルを、zoomslider.js(https://github.com/mingyeungs/jquery-zoomslider/)にてスライダーに変更する」というものです。
取引先様の指示にあった、「ZoomSlider用のHTMLコードをfunctions.php内に記述してショートコードを作成し、そのショートコードをWordPressビジュアルエディター内に記載する」という手法で取り組み、一応画面として問題なく表示はされる状態まで持っていきました。
しかしながら、「ページ内のリンクを踏んで別ページに遷移した後、ブラウザバックでTOPページに戻る」「他ページからTOPページへのリンクを踏んで遷移する」という動作を行うと、スライダー画像が表示されない事象が発生しております。
スライダー用のHTML内に記述した、<div class="inner-content"></div>(画像の上にテキストなどを表示させる際の記述)の情報は表示されており、ショートコードは実行されているものと思われます。
画像のみ表示されない状況です。
恐らくPjaxでページ遷移を処理していることから、ブラウザバックや表示の際に妙な挙動をしているものと思われます。
Pjaxという概念に疎く、このような状況は初めてです。
お知恵を賜りたく存じます。
発生している問題・エラーメッセージ
画面遷移にPjaxを使用するWordPressテーマを適用させたサイトにて、zoomslider.jsの画像がブラウザバックで表示されなくなる。
該当のソースコード
jQery
1/* =================================================== 2 // Barba setting 3 ==================================================== */ 4 5 Barba.Pjax.Dom.wrapperId = 'ch'; 6 Barba.Pjax.Dom.containerClass = 'c-ch'; 7 Barba.Pjax.init(); 8 Barba.Prefetch.init(); //dispatcher settings 9 10 Barba.Pjax.originalPreventCheck = Barba.Pjax.preventCheck; 11 Barba.Pjax.preventCheck = function(evt, element) { 12 if(element){ 13 if (!element.getAttribute('href')) { 14 return false; 15 } 16 // �O�������N��target="_blank"�� 17 var site_url = location.protocol + '//' + location.host; 18 if (!element.href.startsWith(site_url)) { 19 element.setAttribute('target','_blank'); 20 return false; 21 } 22 // �A���J�[�����N�ł��蓯��y�[�W�łȂ����barba��L���� 23 var url = location.protocol + '//' + location.host + location.pathname; 24 var extract_hash = element.href.replace(/#.*$/,""); 25 if (element.href.startsWith(location.protocol + '//' + location.host)) { 26 if (element.href.indexOf('#') > -1 && extract_hash != url ){ 27 return true; 28 } 29 } 30 // �g���q���Y������ꍇ��target="_blank"�� 31 if (/.(xlsx?|docx?|pptx?|pdf|jpe?g|png|gif|svg)/.test(element.href.toLowerCase())) { 32 element.setAttribute('target','_blank'); 33 return false; 34 } 35 // �Y���N���X�ɑ����Ă����Barba�????��� 36 var ignoreClasses = ['ab-item','nagare-no-barba']; 37 for (var i = 0; i < ignoreClasses.length; i++) { 38 if (element.classList.contains(ignoreClasses[i])) { 39 return false; 40 } 41 } 42 if (!Barba.Pjax.originalPreventCheck(evt, element)) { 43 return false; 44 } 45 return true; 46 } 47 }; 48 49 Barba.Dispatcher.on('newPageReady', function (currentStatus, oldStatus, container, newPageRawHTML) { 50 //header rewrite 51 if (Barba.HistoryManager.history.length === 1) { 52 return; 53 } 54 55 var head = document.head; 56 var newPageRawHead = newPageRawHTML.match(/<head[^>]*>([\s\S.]*)</head>/i)[0]; 57 var newPageHead = document.createElement('head'); 58 newPageHead.innerHTML = newPageRawHead; 59 var removeHeadTags = ["meta[name='description']", "meta[property^='og']", "meta[name^='twitter']", "meta[itemprop]", "link[itemprop]", "link[rel='prev']", "link[rel='next']", "link[rel='canonical']"].join(','); 60 var headTags = head.querySelectorAll(removeHeadTags); 61 62 for (var i = 0; i < headTags.length; i++) { 63 head.removeChild(headTags[i]); 64 } 65 66 var newHeadTags = newPageHead.querySelectorAll(removeHeadTags); 67 68 for (var _i = 0; _i < newHeadTags.length; _i++) { 69 head.appendChild(newHeadTags[_i]); 70 } 71 72 var newPageRawLogo1 = newPageRawHTML.match(/<div id="logo"[^>]*>([\s\S.]*?)</div>/i)[1]; 73 $("#logo").html(newPageRawLogo1); 74 75 let gam_opt_divs = ['div-gpt-ad-1572933303259-0', 'div-gpt-ad-1572933415196-0', 'div-gpt-ad-1572933511534-0']; //����������Ă������K�pID���Z�b�g���܂��B 76 requestAnimationFrame(function () { 77 googletag.cmd.push(function () { 78 googletag.pubads().refresh(gptAdSlots); //�L���̍X�V 79 for(var opt_div in gam_opt_divs){ 80 googletag.display(opt_div); //�L���̍ĕ\�� 81 } 82 }); 83 }); 84 }); //unique settings 85 86 // call clearAllGAMSlots in linkClicked event 87 Barba.Dispatcher.on('linkClicked', function (el) { 88 if (!window.googletag) { 89 requestAnimationFrame(function () { 90 googletag.cmd.push(function () { 91 googletag.pubads().clear(); 92 }); 93 }); 94 } 95 }); 96 97 var ChangeDammyRight = $('.changedammy-right'); 98 var ChangeAnimation = $('.change-animation'); 99 100 var switchInAnimation = function switchInAnimation(callback) { 101 ChangeAnimation.addClass('is-open'); 102 103 if (ChangeAnimation.hasClass('is-close')) { 104 ChangeAnimation.removeClass('is-close'); 105 } 106 107 if (callback) { 108 callback(); 109 } 110 }; 111 112 var switchOutAnimation = function switchOutAnimation(callback) { 113 ChangeAnimation.addClass('is-close'); 114 $('html').addClass('is-close'); 115 116 if (ChangeAnimation.hasClass('is-open')) { 117 ChangeAnimation.removeClass('is-open'); 118 } 119 120 if (callback) { 121 callback(); 122 } 123 }; 124 125 var PageTransition = Barba.BaseTransition.extend({ 126 start: function start() { 127 Promise.all([ 128 this.newContainerLoading, 129 this.fadeOut() 130 ]).then(this.fadeIn.bind(this)); 131 }, 132 133 fadeOut: function fadeOut() { 134 switchOutAnimation(); 135 return $(this.oldContainer).animate({ 136 opacity: 0 137 }).promise(); 138 }, 139 140 fadeIn: function fadeIn() { 141 var _this = this; 142 143 var $el = $(this.newContainer); 144 window.scrollTo(0, 0); 145 $(this.oldContainer).hide(); 146 $el.css({ 147 visibility: 'visible', 148 opacity: 0 149 }); 150 switchInAnimation(); 151 $el.animate({ 152 opacity: 1 153 }, 400, function () { 154 _this.done(); 155 }); 156 } 157 }); //barba transition 158 159 Barba.Pjax.getTransition = function () { 160 return PageTransition; 161 }; 162 163 $(".change-animation").on('animationend webkitAnimationEnd',function(){ 164 if ($('html').hasClass('is-close')) { 165 $('html').removeClass('is-close'); 166 } 167 }); 168 169 //上記はPjaxを適用させるにあたって導入している「Barba.JS」の設定の記述のようです。 170 //こちらをご覧になって何かおわかりになりますでしょうか?
PHP
1function zoomSlide_func(){ 2 ob_start(); ?> 3 <div id="demo-1" data-zs-src='[ 4 "<?php echo get_stylesheet_directory_uri() ?>/images/top_slide-1.jpg", "<?php echo get_stylesheet_directory_uri() ?>/images/top_slide-2.jpg", "<?php echo get_stylesheet_directory_uri() ?>/images/top_slide-3.jpg", "<?php echo get_stylesheet_directory_uri() ?>/images/top_slide-4.jpg", "<?php echo get_stylesheet_directory_uri() ?>/images/top_slide-5.jpg"]' data-zs-speed="5000" data-zs-bullets="false" data-zs-overlay="false" data-zs-autoplay="true"> 5 <div class="inner-content"> 6 <p class="/* */">/* スライダーの上の文章 */</p> 7 </div> 8 </div> 9 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 10 <script src=" /* modernizr-custom.js を読み込み */ "></script> 11 <script src=" /* jquery.zoomslider.min.js を読み込み*/ "></script> 12 <?php 13 return ob_get_clean(); 14} 15add_shortcode('zoomSlide', 'zoomSlide_func'); 16?> 17//functions.phpに記載の、ショートコードを作成するPHPコード 18// 「[zoomSlide]」をWordPresのビジュアルエディターに貼り付け、以下の画像のようにブラウザ上で反映
試したこと
・ZoomSlider表示に必要な「jQuery(1.11.1)のリンク」「modernizr-custom.js」「jquery.zoomslider.min.js」をfunctions.php内のショートコード作成ファンクションの中に記載。
・Pjaxを実行するにあたって読み込まれている他バージョンのjQueryとコンフリクトしないための記述を行う。
・TOPページに遷移し画面のロードを行った際に(「.is-open」というclassが出現)、ショートコードの周辺のみリロードさせるようなJavaScript/jQueryの記述ができないか模索。(うまくいかず)
PHP
1<?php if ( is_home() || is_front_page() ) : ?> 2 <script type="text/javascript"> 3 if($(document).on('load','#main_contents') && $('#main_contents').hasClass('.is-open')) { 4 $('.zoomSlide_div').location.reload(true); //ここの部分が効かず 5 } 6 </script> 7<?php endif; ?>
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
WordPressバージョン 5.3.2–ja
あなたの回答
tips
プレビュー