ボタンの上に指アイコンを表示する機能

ご依頼いただいた機能の動作と、導入したあとWordPress上で何をすることになるのかを確認していただくためのページです。このページ自体がその機能で動いています。

はじめにお断りです。私の手元にSWELLがないため、このページのボタンはSWELLの実物ではなく、SWELLボタンの5つの型(ノーマル・立体・キラッと・アウトライン・MORE)に対応する形を汎用的に置いたものです。見た目を似せることより、どのボタンに付いて、どれを外せて、管理画面で何をするかを確かめていただくことを目的にしています。実際のテーマ上での確認は、ご契約後に御社のデモサイトで行わせてください。

まず動きを見てください

下のボタンに指アイコンが重なっています。スイッチを切ると消えます。

下の設定パネルからも同じ操作ができます

導入するときに触る場所

お問い合わせでいただいた6項目に、そのままお答えします。必要なのは1つだけです。

作業要否と補足
WordPressにプラグインをインストールする 必要 — 私がお渡しするZIPファイルを、管理画面の「プラグイン → 新規追加 → プラグインのアップロード」から入れて有効化していただきます。作業はこれだけです。
テーマや子テーマのファイルを編集する 不要 — テーマ側には一切手を入れません。テーマを更新しても、将来テーマを入れ替えても、この機能は消えません。
WordPressの管理画面上でコードを追加する 不要 — カスタマイザーの追加CSSやカスタムHTMLに書き足す作業はありません。
サーバーへのアクセスが必要 不要 — WordPressの管理画面だけで完結します。
FTPやファイルマネージャーを使用する 不要 — 同上です。管理者アカウントがあれば足ります。
データベースを操作する 不要 — 設定値は数個だけで、プラグインを削除するときに一緒に消えます。データベースに残骸を残しません。

どのボタンに付くか、どれを外せるか

設定パネルが管理画面の設定にあたります。もう一方の一覧が、サイト内にあるボタンの種類です。個別のスイッチは、記事編集画面で「追加CSSクラス」に no-finger と入れる操作にあたります。

設定パネル

プラグインを入れると、管理画面にこの内容の設定ページが1枚増えます。

サイト全体の表示

一時的に全部消したいときは、ここを切るだけです。プラグインを止める必要はありません。

アイコンの位置

文字を避けたいときは右下・左下をお選びください。中央下はボタンの中心に置くため、文字に重なることがあります。

アイコンの大きさ

44 px

スマートフォンでは自動で少し小さくなるようにします。

動き

画面の動きを減らす設定にしている閲覧者には、自動で止まるようにしてあります。

日常の操作

記事を書く流れの中で完結します。新しく覚えていただくのは、クラス名を1つ入れることだけです。

特定のボタンだけ指アイコンを消す

記事編集画面でそのボタンを選び、右サイドバーのブロック → 高度な設定 → 追加CSSクラスno-finger と入力して更新します。SWELLでボタンの色を変えるときと同じ場所です。

すでに別のクラスが入っている場合は、半角スペースを空けて後ろに足してください。消すときはその一語を削るだけです。

一時的にサイト全体から消す

管理画面 → 設定 → 指アイコン表示を開き、「サイト全体の表示」を切って保存します。記事側の設定はそのまま残るので、また表示したくなったら戻すだけです。

位置・大きさ・動きを変える

同じ設定ページで選び直して保存します。サイト内のすべてのボタンにまとめて反映されます。記事を1つずつ直していただく必要はありません。

やめるとき

プラグインを停止すれば、その時点で元の表示に戻ります。記事のHTMLには指アイコンを書き込んでいないので、記事側に消し残りは出ません。

更新に強くするために考えていること

「アップデートで壊れにくく、他の機能とぶつからないように」というご要望に対して、実装で気をつける点です。

ページ遷移高速化(pjax)を使っていても消えないようにする

SWELL設定の高速化にある「ページ遷移高速化」をオンにしていると、ページを移動したときにJavaScriptが読み直されません。指アイコンをJavaScriptで付ける作りだと、2ページ目以降でアイコンが出なくなります。ここは実際にぶつかりやすい箇所です。

そこで表示はCSSを主体にし、JavaScriptは必要な箇所に限ったうえで、ページの中身が入れ替わったことを検知して付け直す形にします。同じ要素に二重に付かないよう、処理済みの印を見てから動かします。

// 同じ要素を二度処理しない(何度呼ばれても結果が変わらないようにする)
function apply(root) {
  root.querySelectorAll('[data-fgi]').forEach(function (el) {
    if (el.dataset.fgiReady) return;   // 処理済みなら飛ばす
    el.appendChild(makeIcon());
    el.dataset.fgiReady = '1';
  });
}

// pjaxやAjaxで中身が差し替わったら付け直す
new MutationObserver(function () { apply(document); })
  .observe(document.body, { childList: true, subtree: true });

テーマ側の装飾とぶつからないようにする

SWELLボタンは矢印やアイコンの表示に、CSSの疑似要素(::before / ::after)を使っています。同じ場所を指アイコンでも使うと、テーマ側の装飾を消してしまったり、逆に指アイコンが出なくなったりします。

そのため指アイコンは疑似要素ではなく、専用の要素を1つ重ねる形にします。クラス名にも他とかぶらない接頭辞を付けて、他のプラグインのCSSと打ち消し合わないようにします。

お問い合わせフォームの送信ボタンは作りが違う

お問い合わせフォームの送信ボタンは <input type="submit"> という要素で、この要素の中には他のものを入れられない決まりになっています。CSSだけでは指アイコンを重ねられません。

対象に含める場合は、送信ボタンの外側に入れ物を1つ作ってから重ねます。フォームの送信動作には手を入れないので、送信できなくなることはありません。上の一覧で実際に動かして確かめていただけます。

WordPress本体やPHPのバージョンに依存させない

この機能は外部との通信をしません。データベースにも表を作りません。WordPress本体やPHPのバージョンによって書き方が変わるような処理を持たせないので、本体やPHPの更新で動かなくなる可能性は低く抑えられます。

とはいえゼロとは申し上げられないので、納品後3ヶ月の無償保守は、SWELLやWordPressの更新で不具合が出た場合も含めてお受けします。

このページは、選考用に静的なHTMLとして作成したものです。実際の納品物はWordPressプラグイン(ZIPファイル)と、上記「日常の操作」をまとめた操作手順書になります。
ご覧になって気になった点、こういう挙動にしてほしいという点があれば、遠慮なくお知らせください。