かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

WordPress アップロードした画像を width, height 属性無しで取得したい

WordPress でアップロードした画像 (thumbnail) を img タグで取得する the_post_thumbnail() には自動的に width, height 属性がついてくるので場合によっては使いづらいときがあります。

1. post_thumbnail_html フィルターで the_post_thumbnail の出力内容を置き換える

<?php // functions.php
add_filter( 'post_thumbnail_html', 'remove_thumbnail_dimensions');

function remove_thumbnail_dimensions( $html, $post_id, $post_image_id, $size, $att ) {
    $html = preg_replace( '/(width|height)=\"\d*\"\s/', "", $html );
    return $html;
}

cf. How do you remove hard coded thumbnail image dimensions? - WordPress Development Stack Exchange

常に width, height 属性が不要であれば filter を使うのが手っ取り早そうです

2. wp_get_attachment_image_src を使って画像の URL を取得する

img タグを自分で作ってしまうなら画像の URL が取得できれば問題がない

wp_get_attachment_image_src(
  int $attachment_id, string|int[] $size = 'thumbnail', bool $icon = false
): array|false

cf. wp_get_attachment_image_src() | Function | WordPress Developer Resources

サムネイルの attachment_idget_post_thumbnail_id(int|WP_Post $post = null): int|false で取得できる

<?php
$thumbnail = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), $size );
$thumbnail = $thumbnail[0] ?: 'placeholder.jpg';
$title = get_the_title( $post->ID );

echo '<img src="' . $thumbnail . '" alt="' . esc_attr($title) . '" />';

画像の URL を取得してしまえばタグは自由にできますね!

おわり
WordPress のこと本当に何も覚えてない…


[参考]

2030年:すべてが「加速」する世界に備えよ 面白かったです!