[WordPress]+[JavaScript] slickスライダーの一部テキストを動的に変更する工夫と不具合対処

WordPressで運用している企業サイトについての備忘録。

今回は、slickスライダーで工夫した事と、不具合対処について。

スライダーの文章を変えたい

トップページには、企業のサイトらしく「slickスライダー」を表示している。

その1枚に表示している文章を、運用者で毎週変えたい。という要望があった。

運用者はWeb未経験者で、ブログは書けるけどPHPの知識はない。

トップページは固定ページ(Front Page)であり、PHPでゴリゴリに書いている。運用者がPHPを編集してFTPでアップロードする運用は考えられない。

どうするか?

運用者はブログは書けるので、固定ページの編集は出来る。

だから、考えた。

JavaScript で移動しよう!

Front Page に入力用の段落を用意

固定ページ(Front Page)に、入力用の「段落」を作成しておく。

運用者は、そこに文章を入力する。書体の加工も自由に出来る。

JavaScript で表示用の段落にコピー

固定ページ(Front Page)のPHPでは、表示用の段落を用意しておく。

ページ表示時にJavaScriptでコピーし、入力用の段落は削除する。

これでよし。

ソース

入力用(移動元)

段落を一つ作成し、カスタムHTMLで以下のように id を指定する。

<p id="plan-msg-from">
   ・・・(表示内容)・・・
</p>

その後「段落」に変換しておけば、運用者にて自由に編集できる。

表示用(移動先)

PHPの該当位置に定義する。

<p id="plan-msg-to"></p>

JavaScript

要となる JavaScript は以下の通り。

var str = $("p#plan-msg-from").html();
str = str.replace("plan-msg-from", "plan-msg-to");
$("p#plan-msg-to").html(str);
$("p#plan-msg-from").remove();	

1行目:移動元の内容を取り出す(テキストでなく、書式も含めたHTMLとして)
2行目:一応、idを書き換えておく ※これが問題発生の元凶!
3行目:移動先へコピー
4行目:移動元を削除

これでよし。

しばらくは、上手くいっていた。

しかし、問題が

書式を自由に指定できるよう、Gutenberg 段落を Classic Paragraph に変換していた。

そうすると、運用者が「書式設定をクリア」出来てしまうようになる。

これを行うと、せっかくの id の指定まで消えてしまう模様。

移動できない

JavaScript の1行目で入力内容を取得しているが、id が見つからないので、str が null になる。

当然、入力元の削除もできない。⇒ トップページの下に入力用の段落が表示されてしまう。

エラー発生 ⇒ 表示乱れ

JavaScript の2行目で replace しているが、null の場合はエラーになる。

これによって、以降の JavaScript (下部のslickスライダーなど)が動かなくなった。

解決方法

この二つは致命的な表示乱れになり、解決しなければならない。

改良したのは、次の二つ。

入力元の改良

<p> を <div> で囲み、こちらにに id を指定する。

<div id="plan-msg-from">
    <p>
     ・・・(表示内容)・・・
    </p>
</di>

JavaScript の改良

上記に伴って、移動元要素のセレクタを変更。
(見やすいように記述も改良)

var fm = $('div#plan-msg-from p');
var to = $('p#plan-msg-to');
if(fm.length){
    to.html(fm.html());
    fm.remove();
}

ついでに

改良前の JavaScript にあった replace 処理は、廃止した。
必要性がないのはあるが、不具合発生の原因となるものは取り除いておく。

コメント

タイトルとURLをコピーしました