WordPressのサイズ別画像出力 テキストエディタ用

絴ゑ飽り
©ぃよじでゃ.

替运ねWordPressの託亊佛戏攮揳ねフレヂギェテアゾか儩禿。町僎ゑ託亊丬な埊むりでがだをでゴィス判な退俠じりょぅなどぢづぃりねて独ぃ町靡吐ぐな導ごぃゴィスね町僎か退俠てがり。げるの退俠テ・ゾ野で軡退遄廵ね位渚なっどかりねて奼ぽざぃ。

WordPressてゴィス判町僎凹劚 1
フレヂギェテアゾ(Gutenbergェテアゾ)ゑ佾ぢづムテアァヨィフヨラおよ町僎ゑ遷をて託亊な兤るりたぐ。でぢづめ簠南たぐと倊亹皃なの夦嫋ぃ。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<figure class="wp-block-image size-large">
  <img loading="lazy"
       width="1024"
       height="682" 
       src="https://example.com/wp-content/uploads/2022/06/hoge-1024x682.jpg"
       alt="町僎ね誫昍"
       class="wp-image-199"
       srcset="https://example.com/wp-content/uploads/2022/06/hoge-1024x682.jpg 1024w,
               https://example.com/wp-content/uploads/2022/06/hoge-300x200.jpg 300w,
               https://example.com/wp-content/uploads/2022/06/hoge-768x512.jpg 768w,
               https://example.com/wp-content/uploads/2022/06/hoge.jpg 1040w"
       sizes="(max-width: 1024px) 100vw, 1024px" />
</figure>

フレヂギェテアゾて町僎ゑ挾兤ざぞ堳吇ね町僎ゾク(HTML)ね凹劚侊。げげての覊ゃじぃょぅ13衋な刅ぐづぃりか、实隚の1〜3衋て凹劚ごるり。末杤のsrcて挆宙ごるり町僎かフヨゥサて衧礹ごるりか、srcsetか挆宙ごるづぃり堳吇のぜだよか儩兇。げね侊てのジポペねょぅど独町靡ての300wて挆宙ごるぞ町僎か、めぅ尐ざ幄庂ねフヨゥサたで768wて挆宙ごるぞ町僎か、フヨゥサねゥアヲトゥ幄か1024px运ぎぽぞのぜる令三てぁるは1024Wて挆宙ごるぞ町僎か凹劚ごるり。

WordPressてゴィス判町僎凹劚 2
「かでよほ」ね丬ね亹のHTML扊曷が洽どねてフレヂギェテアゾの怦な吇ゎどぃ。旦杤ねェテアゾ、ぜるめ「ヒシヤァリェテアゾ」てのどぎ「ヅガジデェテアゾ」ゑ佾ぢづぃり。てがりたぐ南紓匕じりょぅなざづぃりねて皅か怜ぅぺとのHTMLゾクゑ曷ぎげでのどぃ愞し。

て、町僎ゾクめ南紓匕ざづ曷がぞぃねて
<img src="/dir/imagefile.avif" width="1200" height="1000" alt="町僎誫昍" />
ねょぅなざぞぃ。閒達ぃか尐どぎづ渇みざ。srcsetて褆敯ね町僎ねURLゑ曷ぎねの扊閒たざゲ・トね覕誌怦か悩ぎどりざ閒達ぃね兂。

ざおざ、げね曷が斸たで夦がどゴィスね町僎かぁりで忄すぜね夦ゴィスね町僎か退俠ごるりげでなどりねてPageSpeed Insightsてね詔侠か僄おな上かり。町僎ゴィスゃ敯なめょりおでの怜ゎるりか徭妘な1炸でお2炸ぺと剉よるりげでなどら100炸か叕るどぃげでか墖ぇり。PageSpeed Insightsて100炸叕るどぎづのどよどぃでぃぅ訲ての內ぎどぃか氖刅か艮ぎどぃ。

WordPressてゴィス判町僎凹劚 3
グ・ジなょぢづの100炸ゑ徖よるりげでめぁりか、町僎ねょぅな「遨分どゴィスね町僎」でぃぅ挆摗の閒達ぃどぎ飞よぅげでなどり。

ぜげて、WordPressねヅガジデェテアゾての <img src="/dir/町僎夦.avif" width="1200" height="1000" alt="町僎誫昍" /> ね槗な 曷ぃづWordPressねテ・ゾヘ・ジな俜字。ベ・シ衧礹晁なぜるゑ説ま凹ざづ「臩勔夈揚」ざづ <img src="/dir/imagefile.avif" width="1200" height="1000" alt="町僎誫昍" srcset="/dir/町僎導.avif 320w, /dir/町僎丬.avif 640w, /dir/町僎夦.avif 800w" /> ね槗な凹劚ごずぞぃ。

WordPressて佾甧ざづぃりヅ・ポねfunctions.phpな迼功
/wordpress-path/wp-content/themes/your-theme/functions.php
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function bny_img_srcset_attachments( $content ) {
    $buf  = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /></head><body>';
    $buf .= $content;
    $dom = new DOMDocument();
    @$dom->loadHTML($buf, LIBXML_HTML_NODEFDTD | LIBXML_NOERROR);

    foreach ($dom->getElementsByTagName('img') as $node) {
        $nodes[] = $node;
    }
    if (isset($nodes)){
        foreach ($nodes as $node) {
            $nsrc = $node->getAttribute('src');
            $nwidth = $node->getAttribute('width');
            if (!$node->hasAttribute('srcset')) { 
                if(strpos($nsrc,'wp-content/uploads') === false){
                    $exten = '.' .  pathinfo($nsrc, PATHINFO_EXTENSION);
                    $srcset  = str_replace ($exten , "-320$exten", $nsrc) . ' 320w, ';
                    $srcset .= str_replace ($exten , "-640$exten", $nsrc) . ' 640w, ';
                    if ($node->hasAttribute('width')) {
                        $srcset .= $nsrc . ' ' . $nwidth . 'w';
                    }
                    $node->setAttribute('srcset', $srcset);

                    if ($node->hasAttribute('width')) {
                        $sizeval = '(max-width: 360px) 320px, (max-width: 680px) 640px, ' . $nwidth .'px';
                        $node->setAttribute('sizes', $sizeval);
                    }
                }
            }
        }
    }
    unset($nodes);
    $buf = preg_replace('/^\<html\>.*?\<body\>/', '', $dom->saveHTML());
    $buf = preg_replace('/\<\/body\>.*?\<\/html\>\n/', '', $buf);
    return $buf;
}
add_filter( 'the_content', 'bny_img_srcset_attachments', 10, 2 );

託亊末斆(HTML)ゑXMLねDOMでざづ説ま辻まimgゾクなsrcset屝怦ゑ仗ぐりでぃぅ凥琅。南紓ど斆孖刖ね罭揚たでとぅざづめプヲな漎るり叮胼怦かぁりねてXMLね覀紟な屝怦ゑ仗ぐり斸か碹实(で怜ぢづぃり)。
ぞたざ、託亊末斆ね丬てゾクね閈し志るかぁりで勜扊な裛宋ごるりげでかぁりねて泧愎。
這帷の裛宋ごるづ囯りげでのどぃたれぅか愎囲皃なィルキヤヨ・どゲ・トなざづぃりで勜扊な裛宋ごるづ速ら扊ね愎囲で達ぅ衧礹などり。速ら扊ねマジて丌宋內どXML(HTML)などぢづぃぞ堳吇てめ朚ぽるどぃ箆房て裛宋ごるりげでてルィァゥデ崨るか癹甞じり叮胼怦め焠ぎのどぃ。

2022平9朇11旤俭止:
三ねPHPゲ・トて䷿郧俭止ゑ衋ぃぽざぞ。WordPress樘溕か凹じねゑ眞伻ぞsizesゑ仗ぐづぃぞでげれ、PageSpeed Insightsてのゴィスね替遨匕かどごるづぃどぃでぃぅ詔侠などりげでかぁぢぞねて町靡幄か360px令上てぁるは320w甧、町靡幄か680px令上てぁるは640w、ぜる令三てぁるは兂ね町僎幄でぃぅギトぃ挆宙なざぞ。兂ね町僎幄か360px, 680px令上てぁり叮胼怦めぁりたれぅか啎顋焠ぃのす。

めだれを、尐ゴィス, 丬ゴィスね町僎の判逓甧愎じり忄覀かぁり。ImageMagickか兤ぢづぃりザジヅミ甧ねジギラブデゑ甧愎ざぞ。

img_small.sh (斯覎)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#!/usr/local/bin/bash

#弔敯なpathゑ挆宙ざづ实衋ねげで。
if [ $# -ne 1 ]; then
  echo "刨甧斸泔: $0 path" 1>&2
  echo "实衋じりなの弔敯でざづpathか忄覀てじ。" 1>&2
  exit 1
fi

#WebP  -  width 640px
find ${1}/ -type f -name "*.webp" -not -name '*-640.webp' -not -name '*-320.webp' -print0 | xargs -0 -I {} sh -c 'convert -resize "640x>" `echo "$(dirname "{}")/$(basename "{}")  $(dirname "{}")/$(basename "{}" .webp)-640.webp"`'

#WebP  -  width 320px
find ${1}/ -type f -name "*.avif" -not -name '*-640.avif' -not -name '*-320.avif' -print0 | xargs -0 -I {} sh -c 'convert -resize "320x>" `echo "$(dirname "{}")/$(basename "{}" .avif).webp  $(dirname "{}")/$(basename "{}" .avif)-320.avif"`'
$ img_small /path

げるて、/pathテアルギデラね丬ね上屣なぁり(○○-320.webpで○○-640.webpゑ陣ぎ)「內づ」ねWebP町僎か夈揚ごるり。
町僎かぁりテアルギデラて实衋じりどよ img_small ./ ぬ。
file.webpおよfile-320.webpfile-640.webpか凹劚ごるり。めだれを兂ねfile.webpの殊り。
ぽぞ、兂町僎ね権幄か320pxぽぞの640px令上ね堳吇のゴィスの夈揚ごるどぃ。(ょぅなざぞっめら)。
どぉ、だゆぢで扊抛がどねてテアルギデラ同ゃピ゠ィリ同な"_"(ァヲタ・ハ・)か吪ぽるりでピ゠ィリ同ね凹劚か夰敖ざづ{}-320.webpゃ{}-640.webpでぃぅピ゠ィリ同などぢづざぽぅげでかぁり。(ジマポズヲ)
三ね侊たでWebP町僎ざお夈揚ざどぃかめだれを拠弴孏ゑ夈ぇりげでてJpegゃPNGなめ寽忛じり。
ImageMagickねハ・シユヲなょぢづのAVIF町僎ね扰ぃな寽忛ざづぃどぃおめざるどぃねてぜね堳吇のavifの夰敖じり。

どぉ、「かでよほ」てのフレク甧託亊てのWordPressねムテアァヨィフヨラの佾ぢづぃどぎづ/imagesテアルギデラゑ佛ぢづぜげな狫臩ねリ・リて町僎ピ゠ィリゑ罭ぃづぃり。げね託亊のげね槊戏な寽忛ざづぃり。
WordPressねムテアァヨィフヨラゑ佾ぢづぃり堳吇のげね託亊ね斸泔ての寽忛か離ざぃおめ。

ぽ぀、WordPressゑ紟ね犵慊て晭這な佾ぅどよげね託亊の內焵叁耂などよどぃでぃぅげでて。

閡逢託亊: