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

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

新規登録して質問してみよう
ただいま回答率
85.35%
WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

1100閲覧

Pjaxを採用したオリジナルWordPressテーマによるサイト制作中、ZoomSlider.jsの画面がブラウザバックや他ページからのリンククリックで表示されなくなるのを回避したい。

mario_parallel

総合スコア5

WordPress

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/03/22 06:34

編集2020/03/23 09:29

前提・実現したいこと

初めて質問させていただきます。
取引先様が作成した、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のビジュアルエディターに貼り付け、以下の画像のようにブラウザ上で反映

TOPページのHTMLのスクリーンショット

試したこと

・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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2020/03/22 12:48

状況を再現できる最小限のソースコードを提示することは可能でしょうか?
mario_parallel

2020/03/22 13:25

こんばんは。書き込みをありがとうございます。 取引先様によると、オリジナルテーマの情報を明かすのは避けてほしいとのことでした。 何かを記載したいのですが、テーマ内に読み込まれているJavaScriptなどが膨大で、何をどうまとめれば良いのか見当がつかず申し訳ありません。 ですが、何か状況を判断いただけるような材料を記載いたしますので、少々お待ちいただけましたら幸いです。 よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問