【スポンサーリンク】

[WordPress]画像キャプションをalt属性を自動設定するカスタムスクリプト(functions.php)

[WordPress]画像キャプションをalt属性を自動設定するカスタムスクリプト(functions.php)
  • WordPressの画像ブロックにおいて、キャプションをalt属性に自動設定するカスタムスクリプトを作成しました。
  • このスクリプトは、figcaptionタグ内のテキストを優先的にalt属性に設定します。
  • functions.phpに追加することで、画像のアクセシビリティを向上させることができます。
\記事が役に立ったらシェアしてね/
【スポンサーリンク】

1. 画像のキャプションをalt文字列に活用したい

WordPressの画像ブロックには、キャプションを付けることができます。
画像にAlt文字列が設定されていないときに、もしキャプションがあれば、それを入れられるようにすれば便利だと考えました。

画像のキャプションをalt文字列に活用したい

いちいち画像にalt文字列を入力するのが大変だからです。

画像ブロックは、<figcaption>タグにキャプションの文字列があります。

画像のキャプションをalt文字列に活用したい

HTMLソースはこんな感じです。

<figure class="wp-block-image size-large">
<img width="1024" height="576" 
src="https://chiilabo.com/wp-content/uploads/2024/08/image-9-20240811-104557-1024x576.jpg" 
alt="パスキーを使ってログインする" 
class="wp-image-137127" 
srcset="https://chiilabo.com/wp-content/uploads/2024/08/image-9-20240811-104557-1024x576.jpg 1024w, 
https://chiilabo.com/wp-content/uploads/2024/08/image-9-20240811-104557-300x169.jpg 300w, 
https://chiilabo.com/wp-content/uploads/2024/08/image-9-20240811-104557-768x432.jpg 768w, 
https://chiilabo.com/wp-content/uploads/2024/08/image-9-20240811-104557-1536x864.jpg 1536w, 
https://chiilabo.com/wp-content/uploads/2024/08/image-9-20240811-104557.jpg 1920w" 
sizes="(max-width: 1024px) 100vw, 1024px">
<figcaption class="wp-element-caption">ログインするGoogleアカウントを選ぶ</figcaption>
</figure>

2. functions.phpのコード(set_auto_alt_text_for_all_images)

そこで、functions.phpのコードを変更しました。

XPathクエリを修正して、figure要素も取得するようにしました。

/** 2024-08-11 WordPressアイキャッチ画像の自動alt属性設定 */
function set_auto_alt_text_for_all_images($content) {
    if (!$content) {
        return $content;
    }
    // DOMDocument オブジェクトを作成
    $dom = new DOMDocument();
    libxml_use_internal_errors(true);
    
    // PHP バージョンに応じて適切な方法で HTML を読み込む
    if (defined('LIBXML_HTML_NOIMPLIED') && defined('LIBXML_HTML_NODEFDTD')) {
        $dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
    } else {
        $dom->loadHTML(mb_convert_encoding($content, 'HTML-ENTITIES', 'UTF-8'));
    }
    
    libxml_clear_errors();
    $xpath = new DOMXPath($dom);
    $elements = $xpath->query('//h2 | //h3 | //figure');
    $last_heading = '';
    foreach ($elements as $element) {
        if ($element->tagName === 'h2' || $element->tagName === 'h3') {
            $last_heading = trim($element->textContent);
        } elseif ($element->tagName === 'figure') {
            $img = $xpath->query('.//img', $element)->item(0);
            $figcaption = $xpath->query('.//figcaption', $element)->item(0);
            
            if ($img) {
                $alt = $img->getAttribute('alt');
                if (empty($alt)) {
                    if ($figcaption) {
                        $img->setAttribute('alt', esc_attr(trim($figcaption->textContent)));
                    } elseif (!empty($last_heading)) {
                        $img->setAttribute('alt', esc_attr($last_heading));
                    } else {
                        $img->setAttribute('alt', esc_attr(get_the_title()));
                    }
                }
            }
        }
    }
    // 変更を適用した HTML を返す
    $newHtml = $dom->saveHTML();
    return $newHtml !== false ? $newHtml : $content;
}

// アイキャッチ画像用の関数(変更なし)
function set_auto_alt_text_for_featured_image($html, $post_id, $post_thumbnail_id, $size, $attr) {
    if (empty($attr['alt'])) {
        $post_title = get_the_title($post_id);
        $html = preg_replace('/alt=([\'"]?)([^\'"]*)\1/i', sprintf('alt="$2%s"', esc_attr($post_title)), $html);
    }
    return $html;
}

// フィルターを適用
add_filter('the_content', 'set_auto_alt_text_for_all_images');
add_filter('post_thumbnail_html', 'set_auto_alt_text_for_featured_image', 10, 5);
figure要素を処理する部分
  • figure内のimg要素を取得
  • figure内のfigcaption要素を取得
  • alt属性が空の場合、以下の優先順位で設定:
    figcaptionのテキスト(存在する場合)
    最後の見出し(figcaptionがない場合)
    記事のタイトル(上記両方がない場合)

functions.phpのカスタムスクリプトを前回のものと置き換えると、ちゃんと動作しました。

functions.phpのコード(set_auto_alt_text_for_all_images)
こちらもどうぞ。
[WordPress]記事内の画像のalt属性を見出しから自動設定した(functions.php)
[WordPress]記事内の画像のalt属性を見出しから自動設定した(functions.php)
WordPressのアイキャッチ画像にalt属性を自動設定する方法を紹介します。functions.phpにカスタム関数を追加することで、空のalt属性に記事タイトルを設定します。この機能により、SEOとアクセシビリティの向上が期待できます。

[WordPress]ブロックエディタに「書式のクリア」のショートカットキーを追加した(functions.php)
[WordPress]ブロックエディタに「書式のクリア」のショートカットキーを追加した(functions.php)
WordPressのブロックエディタに「書式のクリア」のショートカットキーを追加しました。 functions.phpとcustom-editor.jsを使用して、Command+Jで「書式のクリア」をできるようにしました。 「書式のクリア」のショートカットキーを追加したい WordPressのブロックエディターにControl+Spaceでテキストの書式をクリアするショートカットキーとして「Command+J」を追加しようと思います。 ブロックエディタの「書式のクリア」は、...

QRコード生成APIをGoogleからqrserver.comに変更した
QRコード生成APIをGoogleからqrserver.comに変更した
ついに GoogleAPIsのQRコード生成APIが終了していたので、QR code generator(goqr.me)のAPIに変更しました。 変更前: ' . $url 変更後: ' . urlencode($url) 前提: $url = get_the_permalink(); URLをURLエンコードするのがポイントです。 QRコードが表示されていない? このサイトの記事を印刷すると、その記事のQRコードが印刷されるように設定しています。 ところが、久しぶりに印刷...

[Cocoon] サイトロゴのリンク先をページ種類で変えた(WordPress)
[Cocoon] サイトロゴのリンク先をページ種類で変えた(WordPress)
Cocoonテーマでサイトロゴのリンク先を変更したいと思って、 functions.phpをカスタマイズしました。 add_filterで「'mobile_header_site_logo_url'」の処理で条件分岐するようにして、記事ページとトップページではブログ一覧に移動するように変更しました。 ロゴのリンク先を分岐させたい サイト上のロゴを押したとき、通常はトップページに移行します。しかし、記事上に限ってはブログ一覧ページに移行するように変更しようと思います。 以下のコ...
QRコードを読み込むと、関連記事を確認できます。

[WordPress]画像キャプションをalt属性を自動設定するカスタムスクリプト(functions.php)
【スポンサーリンク】
タイトルとURLをコピーしました