スポンサーリンク

EWWWプラグインであるページ・ある時だけLAZYLOZADを無効にしたい。

EWWWプラグインを使っていて内部リンクなんかを利用すると、アンカー位置がうまくとれなくてずれてしまうことがあります。
後読みにしてある画像が読み込まれていないときは、ページの高さが正しく出ていない状態なので、ずれてしまうんですね。これまた、原因に気が付くまでに数時間、その対処を考えるのに数時間、解決策を正常化させるのに数時間…と、二日もかかってしまった。もっと見積もり高くしておけよかった、、なんてことは良くありますね笑

と、そんなこんなで「あるページ」「ある時」だけLAZYLOZADを無効にしたいときがありますね。
そんなときはfunctions.phpにこんな記述でも対応できました。ちょっとどんくさいかもですが、参考になるとよいです。

function skip_lazyload(){
if(is_page()){
//固定ページのときとしてある。ここで条件を変えればいろいろ対応できる。
add_action('the_content','content_add_class_skip_lazy');
//the_contentでEWWWWの出力前にいじります。
//いじる内容は↓content_add_class_skip_lazyという関数を作りました。
}
}
add_action('wp','skip_lazyload');

function content_add_class_skip_lazy($content){
$dom = new DOMDocument;
//PHP5から使えるようになった、HTMLパースができる機能。知らなかった…便利だ!
//だが文字化けがヒドイ!
@$dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'utf-8'));
//なのでエンコード
$imgs = $dom->getElementsByTagName('img');
//EWWWはimgタグにskip-lazyとclassを付ければ無視してくれる。
foreach($imgs as $img){
$class = $img->getAttribute('class');
//一回、現状のclassを取得
$img->setAttribute('class', $class." skip-lazy");
//現状のclassに" skip-lazy"を追加。
}
$content = mb_convert_encoding($dom->saveHTML(), 'utf-8', 'HTML-ENTITIES');
//saveHTML()で変更を保存して、さらにエンコード。
return $content;
//ほんでリターン。
}

EWWWは使いやすいプラグインなので、もうちょっと使いやすいOverrideを用意してほしいな。
他に使いやすい画像軽量化のプラグインあったら、コメントしてください。

スポンサーリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


カテゴリー: PHP, Wordpress | 投稿日: | 投稿者: