SWELLのLightbox(luminous)をClassicエディタでも有効化するカスタマイズ
SWELLは画像をクリックしたときにポップアップする「投稿画像をクリックで拡大表示する機能」が組み込まれています。その機能は、Luminousというjavascriptを使用しています。
Luminousについては以下の記事で紹介しています。
残念ながら、この「投稿画像をクリックで拡大表示する機能」は、ブロックエディタでしか使うことができません。
Classicエディタで作成したサイトをSWELLに乗り換えた時によく問題になるのが、Classicエディタで作成した記事の画像には「投稿画像をクリックで拡大表示する機能」は適用できないという問題です。
少しカスタマイズすることで、Classicエディタで作成した記事にも「投稿画像をクリックで拡大表示する機能」を適用できます。
Classicエディタで作成した記事が大量にある場合や、ブロックエディタに乗せ変えるまでのつなぎとして、ClassicエディタでSWELLの「投稿画像をクリックで拡大表示する機能」を適用するカスタマイズをご紹介します。
「投稿画像をクリックで拡大表示する機能」はなぜClassicエディタでは有効にならないか?
結論から申し上げますと、ブロックエディタで画像を挿入したHTML構造になっていないと「投稿画像をクリックで拡大表示する機能」が画像を見つけてくれません。
SWELLでは、javascriptを使って特定のHTML構造になっているimgタグのマークアップを変更することで、その画像でluminousが有効になるようにしています。
「投稿画像をクリックで拡大表示する機能」では.post_content .wp-block-image img
というセレクタで選択できる画像だけが対象になります。
Classicエディタで挿入した画像には、.wp-block-image
がありませんから、対象外ということになってしまうのです。
Classicエディタで追加した画像に.wp-block-image
を持つwrapperを付ければ認識する
Classicエディタで追加した画像は、pタグで囲まれています。
こんな感じです。↓
<p>
<img src="...">
</p>
このpタグに.wp-block-image
を追加すればいいのですが、このpタグは自動的に追加されるものでclassicエディタでは触れません。
SWELLのluminousでは、.wp-block-image
をjavascriptで探していますので、それよりも前にマークアップの変更が終わってないといけません。
このpタグをfigure
タグに置き換えて、classを追加するという処理を、the_contet
フィルターでゴニョゴニョすることで、簡単に希望するHTML構造することが可能です。
プライオリティが12になっているのはwpautop()
処理よりも後にフィルターを実行するためです。
function filter_ptags_on_link_images($content)
{
$count=0;
$res = preg_replace('/<p>\s*(<a .*>)?\s*(<img .* \/>)\s*(<\/a>)?\s*<\/p>/iU', '<figure class="wp-block-image classic">\1\2\3</figure>', $content,-1,$count);
return $res;
}
add_filter('the_content', 'filter_ptags_on_link_images',12,1);
まとめ
Classicエディタで作成した記事が多くて、Classicブロックのまま放置してある場合、「投稿画像をクリックで拡大表示する機能」が動かないので、今回の記事のカスタマイズを参考にしてみてください。
コメント