サポート » 使い方全般 » 記事の最初の画像の「URL」「width」「height」を取得したい

  • 解決済 kj554

    (@kj554)


    プラグインを使わずにJSON-LDで構造化データを出力したいのですが、色々と検索しても分らないので、ご教授をお願いします。

     やりたいこと
    1・Wordpressの記事に投稿した最初の画像の「URL」「width」「height」をタグ形式で出力したい。
    2・画像の有り無しで表示を分岐をしたい。

    既に構造化データを利用しているので、具体的には下記のような形でテンプレートに追加したいです。

    <?php if(最初の画像があれば表示):?>
    “image”: {
    “@type”: “ImageObject”,
    “url”: “最初の画像のURLのタグ”,
    “height”: “最初の画像のheightのタグ”,
    “width”: “最初の画像のwidthのタグ”
    },
    <?php else:?>
    <?php endif;?>

     現状
    ネットで調べると、アイキャッチ画像を使って構造化データを出力する方法は紹介されていたので、色々と試してみたのですが、どうやら私はアイキャッチ画像を使っていないようで、ネットで紹介されている方法はダメでした。

     お願い
    私はコピペでカスタマイズする程度の知識しかないので、コピペでテンプレートに追加すれば完成するような形でご教授をお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • こんにちは

    どのような画像でも正確に取得しよとすると意外と大変です。外部画像はどうするか、ショートコードは展開するか、ギャラリーブロックは、相対パス、サブサイズ画像、CDN、画像の種類、エラー時などなど。
    簡易的な方法とはなりますが、画像ブロックなどの WP の標準ブロックで追加した画像には wp-image-123 (123 は添付ファイル ID) のようなクラス名が付与されるので、これを利用する方法はどうでしょうか?ほとんどの場合はこれで問題ないと思います。

    使い方は、コード内のコメントをご覧ください。

    /**
     * 投稿の最初の画像を取得します(簡易版)。
     *
     * @param int|WP_Post  $post オプション。投稿 ID または WP_Post オブジェクト。デフォルトは global $post.
     * @param string|int[] $size オプション。イメージサイズ。画像サイズ、または幅と高さの値の配列。デフォルトは 'thumbnail'。
     * @return array|false {
     *     イメージデータの配列、または false。
     *
     *     @type string $0 画像の URL。
     *     @type int    $1 画像の幅。
     *     @type int    $2 画像の高さ。
     *     @type bool   $3 サイズが変更されたかどうか。
     * }
     */
    function my_get_the_post_first_image_src( $post = null, $size = 'post-thumbnail' ) {
    	if ( $post = get_post( $post ) ) {
    		$content = $post->post_content;
    		preg_match( '/<img .*?class=[\"|\'].*?wp-image-([0-9]*)[\s\"|\']/i', $content, $matches );
    		if ( $matches ) {
    			$attachment_id = (int) $matches[1];
    			return wp_get_attachment_image_src( $attachment_id, $size );
    		}
    	}
    	return false;
    }
    • この返信は5ヶ月、 3週前にishitakaが編集しました。

    使用例:

    if ( $src = my_get_the_post_first_image_src() ) {
    	echo 'url:' . $src[0];
    	echo 'width:' . $src[1];
    	echo 'height:' . $src[2];
    }
    スレッド開始 kj554

    (@kj554)

    返信ありがとうございます。

    ご紹介いただいたコードをfunctions.phpにコピペして、色々と試してみたのですが、私の知識では「URL」「width」「height」呼び出すことが出来ませんでした。

    <?php the_author(); ?> のような感じのテンプレートタグで呼び出すにはどのようにすれば良いのでしょうか?よろしくお願いします。

    こんな感じでしょうか。

    <?php if ( $src = my_get_the_post_first_image_src() ): ?>
    <?php echo $src[0]; ?>
    <?php echo $src[1]; ?>
    <?php echo $src[2]; ?>
    <?php endif; ?>

    my_get_the_post_first_image_src() の戻り値は wp_get_attachment_image_src() と同じです。下記ページをご覧ください。
    関数リファレンス/wp get attachment image src – WordPress Codex 日本語版

    スレッド開始 kj554

    (@kj554)

    本当に、ありがとうございました。ブロックエディタを使って画像を貼り付けると、無事に高さや横幅が取得できました。お世話になりました。

    スレッド開始 kj554

    (@kj554)

    お世話になりました。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • このトピックに返信するにはログインが必要です。